Open nfssuzukaze opened 3 years ago
转换规则:
原始值转换为 Number 类型
Null 转换为 Number,转换后的结果为 0
0
Undefined 转换为 Number,转换后的结果为 NaN
NaN
Boolean 转换为 Number,true 会转换成 1 ,flase 会转换成 0
true
1
flase
String 转换为 Number
引用值转换为 number 类型
基本原则:
对象转换为数字的过程中:
如果对象有 valueOf() 方法,且调用该方法可以返回一个原始值,则 javascript 将这个原始值转换为数字并返回这个数字
valueOf()
否则,如果对象有 toString() 方法,且返回一个原始值,则 javascript 将这个原始值转换为数字并返回这个数字
toString()
否则,javascript 抛出一个类型错误异常
转换完之后,如果原始值不是数字的话,再对原始值进行 Number() 转换
具体实现(一般情况):
Object.ptototype.valueOf()
Object.prototype.toString()
Number()
Array.prototype.toString()
Date.prototype.valueOf()
RegExp.prototype.toString()
Function.prototype.toString()
转换规则
原始值转换
Null 转换为 String,返回 "null"
"null"
Undefined 转换为 String,转换为 "undefined"
"undefined"
Number 转换为 String,普通地转换为字符串类型
Boolean 转换为 String,转换为 "true" 或 "false"
"true"
"false"
引用类型转换
方法:ToPrimitive
ToPrimitive(input, PreferredType)
input : 表示要处理的输入值
PreferredType : 非必填,表示希望转换成的类型,有两个值可选,Number 或者 String 。
如果是 ToPrimitive(obj, Number),处理步骤如下:
如果是 ToPrimitive(obj, String),处理步骤如下:
一元加法 +
+
当 + 运算符作为一元操作符的时候,会进行隐式的 ToNumber 转换
一元减法 -
-
当 - 运算符作为一元操作符的时候,会进行隐式的 ToNumber 转换
二元加法 +
当计算 value1 + value2时的类型转换:
二元减法 -
当计算 value1 - value2时的类型转换:
返回 ToNumber(value1) - ToNumber(value2)
当执行 x == y 时:
如果x与y是同一类型:
x是null并且y是undefined,返回true
x是undefined并且y是null,返回true
x是数字,y是字符串,判断x == ToNumber(y)
x是字符串,y是数字,判断ToNumber(x) == y
x是布尔值,判断ToNumber(x) == y
y是布尔值,判断x ==ToNumber(y)
x是字符串或者数字,y是对象,判断x == ToPrimitive(y)
x是对象,y是字符串或者数字,判断ToPrimitive(x) == y
返回false
若是不同类型值的判断:
注:若数组中的元素有 null ,则在其转换为字符串时,null 元素会被忽略
console.log([null, 1, null].toString()) //=> ",1,"
数据类型之间的转换
数据类型之间转换的规则
1. 转换为 Boolean
2.转换为 Number
转换规则:
原始值转换为 Number 类型
Null 转换为 Number,转换后的结果为
0
Undefined 转换为 Number,转换后的结果为
NaN
Boolean 转换为 Number,
true
会转换成1
,flase
会转换成0
String 转换为 Number
引用值转换为 number 类型
基本原则:
对象转换为数字的过程中:
如果对象有
valueOf()
方法,且调用该方法可以返回一个原始值,则 javascript 将这个原始值转换为数字并返回这个数字否则,如果对象有
toString()
方法,且返回一个原始值,则 javascript 将这个原始值转换为数字并返回这个数字否则,javascript 抛出一个类型错误异常
转换完之后,如果原始值不是数字的话,再对原始值进行 Number() 转换
具体实现(一般情况):
Object.ptototype.valueOf()
方法, 后调用Object.prototype.toString()
转换为 string 类型,再调用Number()
方法将 string 类型转换为 number 类型。Array.prototype.toString()
方法将数组转换为 string 类型,再调用Number()
方法将 string 类型转换为 number 类型。Date.prototype.valueOf()
方法,返回距离 1970年1月1日00:00 的毫秒数。RegExp.prototype.toString()
方法转换为 string 类型,再调用Number()
方法将 string 类型转换为 number 类型。Function.prototype.toString()
方法转换为 string 类型,再调用Number()
方法将 string 类型转换为 number 类型3.转换为 String
转换规则
原始值转换
Null 转换为 String,返回
"null"
Undefined 转换为 String,转换为
"undefined"
Number 转换为 String,普通地转换为字符串类型
Boolean 转换为 String,转换为
"true"
或"false"
引用类型转换
toString()
方法,则调用该方法,如果返回的是原始值,则 javascript 将其返回valueOf()
方法,如果返回一个原始值,则 javascript 将其返回4.引用类型转换为原始值的规则
方法:ToPrimitive
input : 表示要处理的输入值
PreferredType : 非必填,表示希望转换成的类型,有两个值可选,Number 或者 String 。
如果是 ToPrimitive(obj, Number),处理步骤如下:
如果是 ToPrimitive(obj, String),处理步骤如下:
隐式类型转换
一元操作符
一元加法
+
当
+
运算符作为一元操作符的时候,会进行隐式的 ToNumber 转换一元减法
-
当
-
运算符作为一元操作符的时候,会进行隐式的 ToNumber 转换二元操作符
二元加法
+
当计算 value1 + value2时的类型转换:
二元减法
-
当计算 value1 - value2时的类型转换:
返回 ToNumber(value1) - ToNumber(value2)
== 相等
当执行 x == y 时:
如果x与y是同一类型:
x是null并且y是undefined,返回true
x是undefined并且y是null,返回true
x是数字,y是字符串,判断x == ToNumber(y)
x是字符串,y是数字,判断ToNumber(x) == y
x是布尔值,判断ToNumber(x) == y
y是布尔值,判断x ==ToNumber(y)
x是字符串或者数字,y是对象,判断x == ToPrimitive(y)
x是对象,y是字符串或者数字,判断ToPrimitive(x) == y
返回false
若是不同类型值的判断:
注:若数组中的元素有 null ,则在其转换为字符串时,null 元素会被忽略