高密网站开发,三品合一网站建设案例,做海报可以在哪些网站下载素材,网站开发需求分析包括哪些方面首先要介绍ToPrimitive方法#xff0c;这是 JavaScript 中每个值隐含的自带的方法#xff0c;用来将值 #xff08;无论是基本类型值还是对象#xff09;转换为基本类型值。如果值为基本类型#xff0c;则直接返回值本身#xff1b;如果值为对象#xff0c;其看起来大概…首先要介绍ToPrimitive方法这是 JavaScript 中每个值隐含的自带的方法用来将值 无论是基本类型值还是对象转换为基本类型值。如果值为基本类型则直接返回值本身如果值为对象其看起来大概是这样
/**
* obj 需要转换的对象
* type 期望的结果类型
*/
ToPrimitive(obj,type)type的值为number或者string。
1当type为number时规则如下
调用obj的valueOf方法如果为原始值则返回否则下一步调用obj的toString方法后续同上抛出TypeError 异常。
2当type为string时规则如下
调用obj的toString方法如果为原始值则返回否则下一步调用obj的valueOf方法后续同上抛出TypeError 异常。
可以看出两者的主要区别在于调用toString和valueOf的先后顺序。默认情况下
如果对象为 Date 对象则type默认为string其他情况下type默认为number。
总结上面的规则对于 Date 以外的对象转换为基本类型的大概规则可以概括为一个函数
var objToNumber value Number(value.valueOf().toString())
objToNumber([]) 0
objToNumber({}) NaN而 JavaScript 中的隐式类型转换主要发生在、-、*、/以及、、这些运算符之间。而这些运算符只能操作基本类型值所以在进行这些运算前的第一步就是将两边的值用ToPrimitive转换成基本类型再进行操作。
以下是基本类型的值在不同操作符的情况下隐式转换的规则 对于对象其会被ToPrimitive转换成基本类型所以最终还是要应用基本类型转换规则
操作符 操作符的两边有至少一个string类型变量时两边的变量都会被隐式转换为字符串其他情况下两边的变量都会被转换为数字。
1 23 // 1231 false // 1 1 Symbol() // Uncaught TypeError: Cannot convert a Symbol value to a number1 false // 1falsefalse true // 1-、*、\操作符
NaN也是一个数字
1 * 23 // 231 * false // 01 / aa // NaN对于操作符
操作符两边的值都尽量转成number
3 true // false, 3 转为number为3true转为number为1
0 false //true, 0转为number为0false转为number为0
0 0 // 0转为number为0对于和比较符
如果两边都是字符串则比较字母表顺序
ca bd // false
a b // true其他情况下转换为数字再比较
12 13 // true
false -1 // true以上说的是基本类型的隐式转换而对象会被ToPrimitive转换为基本类型再进行转换
var a {}
a 2 // false其对比过程如下
a.valueOf() // {}, 上面提到过ToPrimitive默认type为number所以先valueOf结果还是个对象下一步
a.toString() // [object Object]现在是一个字符串了
Number(a.toString()) // NaN根据上面 和 操作符的规则要转换成数字
NaN 2 //false得出比较结果又比如
var a {name:Jack}
var b {age: 18}
a b // [object Object][object Object]运算过程如下
a.valueOf() // {}上面提到过ToPrimitive默认type为number所以先valueOf结果还是个对象下一步
a.toString() // [object Object]
b.valueOf() // 同理
b.toString() // [object Object]
a b // [object Object][object Object]