一、默认类型
类型 | 值 |
---|---|
Undefined | 结果等于输入的参数(不转换)。 |
Null | 结果等于输入的参数(不转换)。 |
Number | 结果等于输入的参数(不转换)。 |
String | 结果等于输入的参数(不转换)。 |
Boolen | 结果等于输入的参数(不转换)。 |
Object | 返回该对象的默认值。(调用该对象的内部方法[[DefaultValue]]一樣)。 |
二、转换为布尔值
类型 | 值 |
---|---|
Undefined | false |
Null | false |
Number | 如果参数是 +0, -0, 或 NaN,结果为 false ;否则结果为 true |
Boolean | 结果等于输入的参数(不转换) |
String | 如果参数参数是空字符串(其长度为零),结果为 false,否则结果为 true |
Object | true |
在火狐下测试:
var Benjamin = " "; console.log(Benjamin.length);//4 console.log(Benjamin == false);//true console.log(Boolean(Benjamin) == false);//false
为何下面两句的结果不同?
console.log(Benjamin == false); 中" "转换为0,则 0 == false 返回true
Boolean(Benjamin) 返回true
三、转换为数值类型
类型 | 值 |
---|---|
Undefined | NaN |
Null | +0 |
Number | 原值 |
String | a.字符串只包含数字转换为十进制数(忽略前导0) b.字符串包含有效浮点格式,转换为对应浮点数(忽略前导0) c.包含有效十六进制格式,转换为十进制数 d.字符串为空(不包含任何字符,但是可以全空格),转换为0 e.字符串除a.b.c.d之外的格式转换为NaN |
Boolean | true:1,false:0 |
Object | a.调用对象的valueOf(),按前面规则转换,如果返回的结果为NaN,则调用toString(),再次按照前面的规则转换 |
console.log(Number(""));//0 console.log(Number(" "));//0 console.log(Number("1.1"));//1.1 console.log(Number("01.1"));//1.1 console.log(Number("1.1.1"));//NaN console.log(Number("0xf"));//15 console.log(Number("0x0xf"));//NaN console.log(Number("123aaaa"));//NaN console.log(Number("0123aaa"));//NaN console.log(Number("0123"));//123
Object.prototype.valueOf ( )
当调用 valueOf 方法,采用如下步骤:
1. 令 O 为以 this 作为参数调用 ToObject 的结果 .
2. 如果 O 是以一个宿主对象 (15.2.2.1) 为参数调用 Object 构造器的结果,则
1. 返回 O 或传递给构造器的原来的宿主对象 . 返回的具体结果是由实现定
义的 .
3. 返回 O.
Object.prototype.toString ( )
当调用 toString 方法,采用如下步骤:
1. 如果 this 的值是 undefined, 返回 "[object Undefined]".
148
2. 如果 this 的值是 null, 返回 "[object Null]".
3. 令 O 为以 this 作为参数调用 ToObject 的结果 .
4. 令 class 为 O 的 [[Class]] 内部属性的值 .
5. 返回三个字符串 "[object ", class, and "]" 连起来的字符串
四、转换为整数和浮点数
ToInteger:
a.对输入参数调用 ToNumber。
b.如果 Result(a) 是 NaN,返回 +0。
c.如果 Result(a) 是 +0 ,-0,+∞,或 -∞,返回 Result(a)。
d.计算 sign(Result(a)) * floor(abs(Result(a)))。
e.返回 Result(d)。
看看两个方法:
parseInt()和parseFloat()
console.log(parseInt(""));//NaN console.log(parseInt(" "));//NaN console.log(parseInt("1.1"));//1 console.log(parseInt("01.1"));//1 console.log(parseInt("1.1.1"));//1 console.log(parseInt("0xf"));//15 console.log(parseInt("0x0xf"));//0 console.log(parseInt("123aaaa"));//123 console.log(parseInt("0123aaa"));//123 console.log(parseInt("0123"));//123
parseFloat():
console.log(parseFloat(""));//NaN console.log(parseFloat(" "));//NaN console.log(parseFloat("1.1"));//1.1 console.log(parseFloat("01.1"));//1.1 console.log(parseFloat("1.1.1"));//1.1 console.log(parseFloat("0xf"));//0 console.log(parseFloat("0x0xf"));//0 console.log(parseFloat("123aaaa"));//123 console.log(parseFloat("0123aaa"));//123 console.log(parseFloat("0123"));//123
五、转换为字符串
类型 | 值 |
---|---|
Undefined | "undefined" |
Null | "null" |
Number | 对数值类型应用toString(): ToString 运算符将数字 m 转换为字符串格式的给出如下所示: |
String | 结果等于输入的参数(不转换)。 |
Boolean | "true","false" |
Object | 1. 调用 ToPrimitive( 输入参数 , 暗示 字符串类型)。 2. 调用 ToString(Result(1))。 3. 返回 Result(2)。 |
console.log(String(NaN));//"NaN" console.log(String(0));//"0" console.log(String(true));//"true" console.log(String(null));//"null" console.log(String(undefined));//"undefined" console.log(String(-5));//"-5" console.log(String({"name":"Benjamin"}));//[object Object] console.log(String(["name","bb","cc"]));//name,bb,cc
六、转换为对象
类型 |
值 |
---|---|
Undefined |
抛出 TypeError 异常 |
Null |
抛出 TypeError 异常 |
Number |
创建一个新的Number对象,其 [[PrimitiveValue]]属性被设为该布尔值的值。 |
String |
创建一个新的String对象,其 [[PrimitiveValue]]属性被设为该布尔值的值。 |
Boolean |
创建一个新的Boolean 对象,其 [[PrimitiveValue]]属性被设为该布尔值的值。 |
Object |
结果是输入的参数(不转换 |
var Benjamin; console.log(Object(undefined));//Object {} console.log(Object(Benjamin));//Object {} console.log(Object(null));//Object {} console.log(Object({"name":"Benjamin"}));//Object { name="Benjamin"} console.log(Object(123));//Number {} console.log(Object("abc"));//String { 0="a", 1="b", 2="c"} console.log(Object(true));//Boolean {}