关于javascript:关于Javascript-隐式类型转换篇

40次阅读

共计 2164 个字符,预计需要花费 6 分钟才能阅读完成。

一、两种数据类型:根本类型、援用类型

根本类型:

String、Boolean、Number、Undefined、Null、Symbol、BigInt

援用类型:

Array、Object、Function

二、根底类型的转换:

1、数字加字符串,变字符串

var num = 1 + '2'; // 只有有 string 类型的,原始值转化字符串 toString()操作,进行字符串拼接

2、数字 减 乘 除 大于 小于 字符串,字符串转数字

如果字符串是纯数字或空字符串或 16 进制则转成数字,否则 NaN

var num = 12 - '3'; //9 数字
var num = 12 / '3'; //4 数字
var num = 12 * '3'; //36 数字
var num = 12 - '3a'; //NaN 字符串转 NaN 数字 -NaN 等于 NaN
var bo = 12 > '3'; //true 字符串 3 转数字 再比拟
var bo = 12 > '3a'; //false 字符串转 NaN 比拟不成立谬误

三、援用类型的转换:

先把援用类型转根底类型再依照根底类型的形式比拟。

如果是 Date 类型的 PreferredType 被设置为 String,其余 PreferredType 被设置为 Number

1、PreferredType 为 Number 先 valueOf()再 toString()

1 输出的值是原始值,则间接返回原始值
2 否则调用对象的 valueOf()办法,如果 valueOf()办法的返回值是原始值,则返回这个原始值。3 否则调用对象的 toString()办法,如果 toString()办法的返回值是原始值,则返回这个原始值。4 否则 抛出 TypeError 异样

2、PreferredType 为 String 先 toString()再 valueOf()

1 输出的值是原始值,则间接返回原始值
2 否则调用对象的 toString()办法,如果 toString()办法返回值是原始值,则返回这个原始值。3 否则调用 valueOf()办法,如果 valueOf()办法的返回值是原始值,则返回这个原始值。4 否则 抛出 TypeError 异样 

局部例子:

console.log([] + []);  //'' (空字符串)
//1 []以 Number 为转换规范, valueOf() 失去的仍然是[]
//2 [] toString 失去 ''//'' + '' 失去 


console.log([] + {}); // '[object Object]'
//1 []以 Number 转换规范,valueOf() > toString() 失去 ''//2 {}以 Number 转换规范,  valueOf()失去{} > toSting() 失去'[object Object]'// 两边字符串凭借失去'[object Object]’console.log({} + {}); //'[object Object][object Object]'
//1 {}以 Number 转换规范,  valueOf()失去{} > toSting() 失去 '[object Object]’// 两边字符串凭借失去 '[object Object][object Object]’var a = 'hello', b = {};
console.log(a + b); //‘hello [object Object]’//1 a 是原始类型 间接返回
//2 {}以 Number 转换规范,  valueOf()失去{} > toSting() 失去 '[object Object]’//3 'hello' + '[object Object]'

四、无关 == 的隐式转换

规定 1:NaN 和其余任何类型比拟都是 false(包含和他本人)

NaN == NaN // false

规定 2:Boolean 和其余任何类型比拟,Boolean 首先转成 Number

true == 1  // true 
true == '2'  // false, 先把 true 变成 1 再比拟
true == ['1']  // true, 先把 true 变成 1,['1']拆箱成 '1', 
undefined == false // false,首先 false 变成 0,而后参考规定 4
null == false // false,同上

规定 3:String 和 Number 比拟,String 转成 Number 类型

123 == '123' // true, '123' 会先变成 123
''== 0 // true,'' 会首先变成 0‘0’== false // true 两者转数字

规定 4:null == undefined 是 true,除此之外,null、undefined 和其余任何后果比拟都为 false

null == undefined // true

null == '' // false
null == 0 // false
null == false // false
undefined == '' // false
undefined == 0 // false
undefined == false // false

规定 5:原始类型和援用类型做比拟时,援用类型会按照 ToPrimitive 规定转换为原始类型再比拟

'[object Object]' == {} 
// true, 对象和字符串比拟,对象通过 toString 失去一个根本类型值
'1,2,3' == [1, 2, 3] 
// true, 同上  [1, 2, 3]通过 toString 失去一个根本类型值

五、图示类型值转换

材料:

JavaScript 隐式转换
JavaScript 隐式类型转换,一篇就够了
帮你彻底弄懂 JavaScript 类型转换

正文完
 0