javascript中的类型转换与测试

来源:互联网 发布:ubuntu 安装samba 编辑:程序博客网 时间:2024/05/17 22:19

一、默认类型

ToPrimitive 转换类型值Undefined结果等于输入的参数(不转换)。Null结果等于输入的参数(不转换)。Number结果等于输入的参数(不转换)。String结果等于输入的参数(不转换)。Boolen结果等于输入的参数(不转换)。Object返回该对象的默认值。(调用该对象的内部方法[[DefaultValue]]一樣)。

二、转换为布尔值

ToBoolean类型值UndefinedfalseNullfalseNumber如果参数是 +0, -0, 或 NaN,结果为 false ;否则结果为 trueBoolean结果等于输入的参数(不转换)String如果参数参数是空字符串(其长度为零),结果为 false,否则结果为 trueObjecttrue

 

 

 

 

 

 

 

在火狐下测试:

var Benjamin = "    ";console.log(Benjamin.length);//4console.log(Benjamin == false);//trueconsole.log(Boolean(Benjamin) == false);//false

为何下面两句的结果不同?

console.log(Benjamin == false); 中"     "转换为0,则 0  == false 返回true

Boolean(Benjamin) 返回true

三、转换为数值类型

ToNumber类型值UndefinedNaNNull+0Number原值String

a.字符串只包含数字转换为十进制数(忽略前导0)

b.字符串包含有效浮点格式,转换为对应浮点数(忽略前导0)

c.包含有效十六进制格式,转换为十进制数

d.字符串为空(不包含任何字符,但是可以全空格),转换为0

e.字符串除a.b.c.d之外的格式转换为NaN

Booleantrue:1,false:0Objecta.调用对象的valueOf(),按前面规则转换,如果返回的结果为NaN,则调用toString(),再次按照前面的规则转换

 

 

 

 

 

 

 

 

 

 

 

 

 

console.log(Number(""));//0console.log(Number("     "));//0console.log(Number("1.1"));//1.1console.log(Number("01.1"));//1.1console.log(Number("1.1.1"));//NaNconsole.log(Number("0xf"));//15console.log(Number("0x0xf"));//NaNconsole.log(Number("123aaaa"));//NaNconsole.log(Number("0123aaa"));//NaNconsole.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(""));//NaNconsole.log(parseInt("     "));//NaNconsole.log(parseInt("1.1"));//1console.log(parseInt("01.1"));//1console.log(parseInt("1.1.1"));//1console.log(parseInt("0xf"));//15console.log(parseInt("0x0xf"));//0console.log(parseInt("123aaaa"));//123console.log(parseInt("0123aaa"));//123console.log(parseInt("0123"));//123

 

parseFloat():

console.log(parseFloat(""));//NaNconsole.log(parseFloat("     "));//NaNconsole.log(parseFloat("1.1"));//1.1console.log(parseFloat("01.1"));//1.1console.log(parseFloat("1.1.1"));//1.1console.log(parseFloat("0xf"));//0console.log(parseFloat("0x0xf"));//0console.log(parseFloat("123aaaa"));//123console.log(parseFloat("0123aaa"));//123console.log(parseFloat("0123"));//123

五、转换为字符串

ToString类型值Undefined"undefined"Null"null"Number

对数值类型应用toString():

ToString 运算符将数字 m 转换为字符串格式的给出如下所示:
1. 如果 m 是 NaN,返回字符串 "NaN"。
2. 如果 m 是 +0 或 -0,返回字符串 "0"。
3. 如果 m 小于零,返回连接 "-" 和 ToString(-m) 的字符串。
4. 如果 m 无限大,返回字符串 "Infinity"。
5. 否则,令 n, k, 和 s 是整数,使得 k ≥ 1, 10k-1 ≤ s < 10k,s × 10n-k 的数字值是 m,
且 k 足够小。要注意的是,k 是 s 在十进制表示中的数字的个数。s 不被 10 整
除,且s 的至少要求的有效数字位数不一定要被这些标准唯一确定。
65
6. 如果 k ≤ n ≤ 21,返回由 k 个 s 在十进制表示中的数字组成的字符串(有序的,开
头没有零),后面跟随字符 '0' 的 n-k 次出现。
7. 如果 0 < n ≤ 21,返回由 s 在十进制表示中的、最多 n 个有效数字组成的字符串,
后面跟随一个小数点 '. ',再后面是余下的 k-n 个 s 在十进制表示中的数字。
8. 如果 -6 < n ≤ 0,返回由字符 '0' 组成的字符串,后面跟随一个小数点 '. ',再后面
是字符 '0' 的 -n 次出现,再往后是 k 个 s 在十进制表示中的数字。
9. 否则,如果 k = 1,返回由单个数字 s 组成的字符串,后面跟随小写字母 'e',根据
n-1 是正或负,再后面是一个加号 '+' 或减号 '-' ,再往后是整数 abs(n-1) 的十进
制表示(没有前置的零)。
10. 返回由 s 在十进制表示中的、最多的有效数字组成的字符串,后面跟随一个小数点
'. ',再后面是余下的是 k-1 个 s 在十进制表示中的数字,再往后是小写字母 'e',
根据n-1 是正或负,再后面是一个加号 '+ ' 或减号 '-' ,再往后是整数 abs(n-1) 的
十进制表示(没有前置的零)。

String结果等于输入的参数(不转换)。Boolean"true","false"Object1. 调用 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

六、转换为对象

ToObject

类型

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 {}