JavaScript中的标准内置属性
常量属性
简单值,全局对象的属性。
1)Infinity
表示无穷大,初始值等同于 Number.POSITIVE_INFINITY (正无穷大)。
1 | Object.getOwnPropertyDescriptor(window, "Infinity"); |
相关的方法:
1.1)isFinite() 方法 和 Number.isFinite() 方法(ES6)
这两个方法都是用来判断被传入的参数值是否为一个有限数值(finite number)。
区别:
JavaScriptCore:globalFuncIsFinite
1 | EncodedJSValue JSC_HOST_CALL globalFuncIsFinite(ExecState* exec) { |
全局的 inFinite(),会先将参数转化成 Number 对象,而 Number.inFinite() 不会。
1 | // isFinite() 与 Number.isFinite() 相同 |
Polyfill:
1 | Number.isFinite = Number.isFinite || function(value) { |
2)NaN
表示 Not-A-Number 的值,初始值为 NaN,和 Number.NaN 的值一样。
1 | Object.getOwnPropertyDescriptor(window,"NaN"); |
比较运算符(==, !=, ===, !==)不能被用来判断一个值是否是 NaN。
必须使用 Number.isNaN() 方法或 isNaN() 方法。
1 | NaN === NaN; // false |
相关的方法:
2.1)isNaN() 方法 和 Number.isNaN() 方法(ES6)
这两个方法都是用来判断被传入的参数值是否为 NaN。
区别:
JavaScriptCore:globalFuncIsNaN
1 | EncodedJSValue JSC_HOST_CALL globalFuncIsNaN(ExecState* exec) { |
首先,isNaN() 会进行 Number(参数) 操作,
而 Number.isNaN() 会进行 typeof 参数 === “number” 判断。
再判断其值是否为 NaN。
1 | isNaN(NaN); // true |
Polyfill:
1 | Number.isNaN = Number.isNaN || function(value) { |
3)undefined
作为属性或变量 undefined 有两种情况:
1,全局对象的属性 undefined,初始值为 undefined。
1 | Object.getOwnPropertyDescriptor(window,"undefined"); |
2,自从 undefined 不被当成保留关键字,它可以作为标识符(变量名)出现在全局作用域以外的其他作用域。
1 | // logs "foo string" |
作为值 undefined 有三种情况:
1,未初始化的变量的值为 undefined
2,未传入实参的形参的值为 undefined
3,没有 return 语句的函数的默认返回值为 undefined
判断是否为 undefined
1,使用 严格相等 === 判断
1 | var x; |
注意:
不能使用 == 判断,因为 null == undefined 返回 true,
如果 x 的值为 null,那么 x == undefined 等式成立。
2,使用 typeof 运算符 判断
1 | // 未声明变量只能使用 typeof 判断 |
3,使用 void 运算符 判断
void 运算符会返回 undefined。
1 | var x; |
相关的方法:
1,void 运算符
void 运算符会对给定的表达式进行求值,然后返回 undefined。
通常只用于获取 undefined 的原始值,一般使用 void(0)(等同于 void 0)。
立即调用的函数表达式
在使用立即执行的函数表达式时,可以利用 void 运算符让 JavaScript 引擎把一个函数识别成函数表达式而不是函数声明(语句)。
1 | void function iife() { |
JavaScript URIs
当用户点击一个以 javascript: URI 时,浏览器会对冒号后面的代码进行求值,然后把求值的结果显示在页面上,这时页面基本上是一大片空白,这通常不是我们想要的。只有当这段代码的求值结果是 undefined 的时候,浏览器才不会去做这件傻事,所以我们经常会用 void 运算符来实现这个需求。
1 | <a href="javascript:void(0);"> |
注意:
虽然这么做是可行的,但利用 javascript: 伪协议来执行 JavaScript 代码是不推荐的,推荐的做法是为链接元素绑定 click 事件。
4)null
null 是一个 JavaScript 字面量,表示空值。
null 与 undefined 的区别:
1 | typeof null // object (bug in ECMAScript, should be null) |