js【详解】自动类型转换

简介: js【详解】自动类型转换

运算符 +

Symbol + 数字

会报错 Cannot convert a Symbol value to a number

Symbol + 字符串

会报错 Cannot convert a Symbol value to a string

存在对象,数组,函数时

对象,数组,函数会先执行其 toString() 方法,再参与运算

其中一方是字符串(字符串拼接)

另一方会自动转换为字符串,再进行字符串拼接

''+1   // '1'
'1'+ 1 // '11'
'1'+ true  //'1true'
'1'+ null  //'1null'
'1'+ undefined  //'1undefined'
let d={}
d+'1'  // '[object Object]1'

let e = {'name':'朝阳','toString':()=>{return 1}};
e+'1'  // '11'
[1,2]+'1'  // '1,21'

两方都不是字符串(加法求和)

能转换为数字的数据会自动转换为数字,再进行加法运算

  • true 转为数字是 1
  • false、null 转为数字是 0
  • undefined 转为数字是 NaN
1 + true // 2
1 + false // 1
1 + null // 1
1 + undefined // NaN
true + true //2
null + false // 0
let e = {'name':'朝阳','toString':()=>{return 1}};
e+1  // 2

运算符 ==

(因转换规则太复杂,不用记,且不推荐使用)

以 x==y 为例

  • 如果x的数据类型和y的数据类型相同,则返回以严格运算符执行判断的结果,即x===y的结果
  • 如果x是null,y是undefined,返回true
  • 如果x是undefined,y是null,返回true
  • 如果x的数据类型是Number,y的数据类型是String,则将y转成Number,然后返回x==toNumber(y)的结果
  • 如果x的数据类型是String,y的数据类型是Number,则将x转成Number,然后返回toNumber(x)==y的结果
  • 如果x的数据类型是Boolean,则将x转成Number,然后返回toNumber(x)==y的结果
  • 如果y的数据类型是Boolean,则将y转成Number,然后返回x==toNumber(y)的结果
  • 如果x的数据类型是String、Number或者Symbol,y的数据类型是Object,则将y转成原始类型,然后返回x==toPrimitive(y)的结果
  • 如果x的数据类型是Object,y的数据类型是String、Number或者Symbol,则将x转成原始类型,然后返回toPrimitive(x)==y的结果
  • 返回false

唯一推荐的使用场景

目录
相关文章
|
7月前
|
JavaScript 前端开发
JavaScript基础语法(类型转换)
JavaScript基础语法(类型转换)
54 0
|
JavaScript 前端开发
js中的类型转换
js中的类型转换
57 0
|
7月前
|
JavaScript 前端开发
JavaScript变量、数据类型、运算符及类型转换
JavaScript变量、数据类型、运算符及类型转换
70 0
|
2月前
|
JavaScript 前端开发 安全
如何处理 JavaScript 中的类型转换错误?
【10月更文挑战第9天】处理类型转换错误需要综合运用多种方法和策略,同时要保持对潜在问题的警惕性。通过合理的错误处理,可以提高程序的健壮性,减少因类型转换错误带来的负面影响。
36 0
|
2月前
|
JavaScript 前端开发
JS隐式类型转换规则
【10月更文挑战第9天】 不同的 JavaScript 引擎可能在隐式类型转换的具体实现上存在一些细微差别。理解这些隐式类型转换规则对于正确处理数据和避免错误非常重要。
20 0
|
3月前
|
JavaScript 前端开发
JavaScript 类型转换
JavaScript 类型转换
28 4
|
4月前
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
|
7月前
|
JavaScript 前端开发 编译器
彻底理解JavaScript中的类型转换(上)
彻底理解JavaScript中的类型转换
211 0
|
5月前
|
JavaScript 前端开发
|
7月前
|
JavaScript 前端开发 Python
javascript中的强制类型转换和自动类型转换
javascript中的强制类型转换和自动类型转换