所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。
包装对象实例可以使用Object对象提供的原生方法,主要是 valueOf 方法和 toString 方法。
1、valueOf( ) 返回包装对象实例对应的原始类型的值
new Number( 123 ).valueOf( ) //"123"
new String( "abc" ).valueOf( ) //"abc"
new Boolean( "true" ).toString( ) //"true"
2、toString( ) 返回该实例对应的原始类型只得字符串形式(同上)
原始类型可以自动调用定义在包装对象上的方法和属性。比如length属性,返回字符串的长度。
Boolean对象除了可以作为构造函数,还可以作为工具方法单独使用:
Boolean( undefined ) // false
Boolean( null ) // false
Boolean( 0 ) // false
Boolean( ' ' ) // false
Boolean( NaN ) // false
Boolean( 1 ) // true
Boolean( 'false' ) // true
Boolean( [ ] ) // true
Boolean( { } ) // true
Boolean ( function( ) { } ) // true
Boolean( /foo/ ) // true
使用not运算符(!)也可以达到同样效果。
!!( function( ) { } ) // true
!!( /foo/ ) // true
对于一些特殊值,Boolean对象前面加不加new,会得到完全相反的结果,必须小心。
if( Boolean( false ) )
console.log( 'true' ); // 无输出
if( new Boolean( false ) )
console.log( 'true' ); // true
if( Boolean( null ) )
console.log('true'); // 无输出
if ( new Boolean( null ) )
console.log('true'); // true