使用 JavaScript 开发时你会碰到很多有趣的事情,尽管你每天都使用 JavaScript,但仍有一些特性是你所不了解的,在这里我将介绍一些你可能没使用过的 JavsScript 特性。
NaN 是 number 类型
NaN
是一个 number 类型且NaN
不等于它自己。事实上,NaN
不等于任何东西,如果要验证一个变量是否是NaN
,可以使用isNaN
方法。
> typeof(NaN)"number"> NaN === NaNfalse
null 是一个 object
null
是一个对象。听起来奇怪,对吗?但这是事实。
typeof(null)"object"
在下面这种情况,null
没有值。因此,null
不应该是Object
的实例。
null instanceof Objectfalse
可以定义 undefined
undefined
不是 JavaScript 中的保留关键字。你可以为它指定值,而它也不会报任何语法错误。
var some_var;undefined> some_var == undefinedtrue> undefined = 'i am undefined'
0.1 + 0.2 不等于 0.3
在 JavaScript 中,0.1 +0.2 == 0.3
会返回 false
,这是因为 JavaScript 将浮点数存储为了二进制。
0.1 + 0.20.30000000000000004> 0.1 + 0.2 == 0.3false
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 Doe23> missingParamerCheck('Mike', 18)Mike18
没有整数(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