特殊数值
- •
null 和 undefined。nul 是一个特殊关键字,不是标识符,不能将其当做变量来使用和赋值
。但 undefined 确实一个标识符,可被当做变量来使用和赋值。
null:指空值
undefined:指没有值
- •
NaN:NaN 是一个特殊值,它和自身并不相等,是唯一一个非自反(即 x === x 不成立的值),而 NaN != NaN 为 true。
- • 那如何判断 NaN 呢?
var a = 2 / 'foo'; isNaN(a); // true
- • ES6 开始我们可使用工具函数 Number.isNaN()
var a = 2 / "foo"; var b = "foo"; Number.isNaN( a ); // true Number.isNaN( b ); // false——好!
- • 还有一个简单方法,利用 NaN 不等于自身这个特点。
if (!Number.isNaN) { Number.isNaN = function(n) { return n !== n; }; }
小结
- 1. 使用
delete
操作符不会影响数组长度 - 2. 除了通过使用数字索引的方式,其他都不计算进数组长度内
- 3. 数值语法中数字前面的 0 可省略
- 4. 注意,
对于
.操作符来说,因为他们是一个有效的数字字符,会被优先识别为数字常量的一部分,然后才是对象属性访问运算符。
- 5. 要检测一个值是否是整数,可以使用 ES6 中的
Number.isInteger(..)
方法 - 6. 最大整数是
9007199254740991
,在 ES6 中被定义为Number.MAX_SAFE_INTEGER
。最小整数是-9007199254740991
,在 ES6 中被定义为Number.MIN_SAFE_INTEGER
- 7. NaN:NaN 是一个特殊值,它和自身并不相等,是唯一一个非自反(即 x === x 不成立的值),而 NaN != NaN 为 true。
- 8. 如何判断一个数是否是 NaN?
var a = 2 / "foo"; var b = "foo"; Number.isNaN( a ); // true Number.isNaN( b ); // false ——好!
原生函数
- • 常见原生函数:
• String() • Number() • Boolean() • Array() • Object() • Function() • RegExp() • Date() • Error() • Symbol() ——ES6 中新加入的!
- • 原生函数可当构造函数使用,但构造出来的对象会我们设想的有所出入。
var a = new String( "abc" ); typeof a; // 是"object",不是"String" a instanceof String; // true Object.prototype.toString.call( a ); // "[object String]"
- •
使用构造函数创建出来的是封装了基本类型值的封装对象。
- • 注意:
typeof 在此返回的是对象类型的子类型。
内部属性 [[Class]]
Object.prototype.toString.call( [1,2,3] ); // "[object Array]" Object.prototype.toString.call( /regex-literal/i ); // "[object RegExp]" Object.prototype.toString.call( null ); // "[object Null]" Object.prototype.toString.call( undefined ); // "[object Undefined]" Object.prototype.toString.call( "abc" ); // "[object String]" Object.prototype.toString.call( 42 ); // "[object Number]" Object.prototype.toString.call( true ); // "[object Boolean]"
- • 上例中,数组的内部 [[Class]] 属性值是 "Array",正则表达式的值是 "RegExp"......
封装对象包装
var a = new Boolean( false ); console.log('a ------>', a); // [Boolean: false] console.log(Boolean(a)); // true if (!a) { console.log( "Oops" ); // 执行不到这里 }
- • 若想要自定义基本类型值,可使用
Object()
函数(不带 new 关键字)
var a = "abc"; var b = new String( a ); var c = Object( a ); typeof a; // "string" typeof b; // "object" typeof c; // "object" b instanceof String; // true c instanceof String; // true Object.prototype.toString.call( b ); // "[object String]" Object.prototype.toString.call( c ); // "[object String]"
小结
- 1. 使用原生函数构造出来的函数对象时封装了基本类型值的封装对象。
- 2. 若想要自定义基本类型值,可使用
Object()
函数(不带 new 关键字)
var b = new String( a ); var c = Object( a ); Object.prototype.toString.call( b ); // "[object String]" Object.prototype.toString.call( c ); // "[object String]"
特殊字符描述
•问题标注 Q:(question)
•答案标注 R:(result)
•注意事项标准:A:(attention matters)
•详情描述标注:D:(detail info)
•总结标注:S:(summary)
•分析标注:Ana:(analysis)
•提示标注:T:(tips)