JavaScript 中有趣的特性

JavaScript 中有趣的特性

原文:https://dev.to/shafikshaon/interesting-facts-in-javascript-22nk

使用 JavaScript 开发时你会碰到很多有趣的事情,尽管你每天都使用 JavaScript,但仍有一些特性是你所不了解的,在这里我将介绍一些你可能没使用过的 JavsScript 特性。

NaN 是 number 类型

NaN是一个number类型且NaN不等于它自己。事实上,NaN不等于任何东西,如果要验证一个变量是否是NaN,可以使用isNaN方法。

> typeof(NaN)
"number"

> NaN === NaN
false

null 是一个 object

null是一个对象。听起来奇怪,对吗?但这是事实。

> typeof(null)
"object"

在下面这种情况,null没有值。因此,null不应该是Object的实例。

> null instanceof Object
false

可以定义 undefined

undefined不是 JavaScript 中的保留关键字。你可以为它指定值,而它也不会报任何语法错误。

> var some_var;
undefined
> some_var == undefined
true
> undefined = 'i am undefined'

0.1 + 0.2 不等于 0.3

在 JavaScript 中,0.1 +0.2 == 0.3 会返回 false,这是因为 JavaScript 将浮点数存储为了二进制。

> 0.1 + 0.2
0.30000000000000004
> 0.1 + 0.2 == 0.3
false

Math.max()小于 Math.min()

Math.max()> Math.min()返回 false 看起来似乎是错误的,但实际上它是正确的。

> Math.max() > Math.min()
false

如果没有给 min()max()传递参数,则返回以下值。

> Math.max()
-Infinity
> Math.min()
Infinity

函数可以自行执行

创建一个函数,在调用其他函数时使用()语法就可以立即调用它。

> (function()  { console.log('I am self executing');  })();
I am self executing

括号的位置问题

看下面的代码,第一个函数的return 语句后面没有东西,当调用时,它什么都不返回,而调用第二个函数则正常返回一个对象。这是因为,JavaScript 在 return 后面添加了一个 ;

> function foo() {
   return
   {
      foo: 'bar'
   }
}
> foo(); 
undefined

> function foo() {
   return {
      foo: 'bar'
   }
}
> foo(); 
{foo: "bar"}

缺少参数默认值

在 JavaScript 中,你可以通过以下方式设置参数默认值。

> function missingParamerCheck(name, age){
    var name = name || 'John Doe'
    var age = age
    console.log(name)
    console.log(age)
}
> missingParamerCheck('', 23)
John Doe
23
> missingParamerCheck('Mike', 18)
Mike
18

没有整数(integer)数据类型

在 JavaScript 中,没有int(整数)数据类型。所有数字都是Number 类型。实际上它在内存中存储int数字的浮点值。

sort()函数类型自动转换

sort() 函数会自动将值转换为字符串,这就会发生下面奇怪的事情。

> [1,5,20,10].sort()
(4) [1, 10, 20, 5]

不过,我们可以通过比较来解决上面出现的问题:

> [1,5,20,10].sort(function(a, b){return a - b});
(4) [1, 10, 20, 5]

Arrays 和 Objects 的和

> !+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]
9
> {} + []
0
> [] + {}
"[object Object]"
> [] + []
""
> {} + {}
"[object Object][object Object]"
> {} + [] == [] + {}
true

可能还喜欢下面的内容

帮你节省旅行开销的几点方法

帮你节省旅行开销的几点方法

深入了解 Webpack 4

深入了解 Webpack 4

如何成为一名优秀的前端工程师

如何成为一名优秀的前端工程师

ins@heyrock