js隐式类型转换规则

一、隐式类型转换是什么

在js中,当运算符两边数据不统一,CPU无法计算,编译器就会自动将运算符两边的数据进行数据类型转换成一样的数据类型再计算。

这种由编译器自动转换的方式就称为隐式类型转换。

二、隐式类型转换的方式

  • 将值转为布尔值,Boolean()
  • 将值转为数字,Number()
  • 将值转为字符串,toString()

三、部分常见值的转化结果

1. 通过Boolean()转化
  • 会转化为false的值:undefined, null, -0, 0, NaN, “”
  • 会转化为true的值:其他所有
2. 通过Number()转化
  • 会转化为NaN的值:undefined,带字母或符号的字符串,所有引用类型(数组,对象,function,date等),NaN
  • 会转化为0的值:null,"",+0,false
  • 布尔值转化为数值:false–>0 ,true–>1

四、隐式类型转换的各种情况

1. if中的条件会被自动转为Boolean类型
2. -减号*,\%isNaN()-负号,+正号

隐式调用Number()转化为数值类型

// 部分示例
  -"4" // -4
  +"7" // 7
  9-"4" // 5
3. 逻辑运算符(! , && , ||)
  • ! 隐式调用Boolean()转化为布尔值

  • &&

    会将第一个操作数转化为Boolean类型

    若转化后第一个操作数为true,则返回第二个操作值;否则返回第一个操作数的原始值

// 部分示例
 1 && "key"  //key
 "key" && "" // ""
 null && "key" // null
 undefined && 0 // undefined
  • ||

    若第一个操作值经转化后为false则返回第二个值,否则返回第一个的原始值

    1 || "key"  //1
    "key" || "" // "key"
    null || "key" // "key"
    undefined || 0 // 0
    
4. + 加法运算符
  • 操作值中有字符串,将其他类型的操作值通过toString()转化为字符串再拼接

  • 其他情况都转化为数值类型

    一些不常见情况

    • NaN + 任意值 = NaN

    • Infinity + Infinity = Infinity

    • -Infinity + (-Infinity) = -Infinity

    • Infinity + (-Infinity) = NaN

    • +0 + (+0) = +0

    • -0 + (-0) = -0

    • +0 + (-0) = +0

    • 3 + true = 4,将true转化为1

    • 4 + false = 4,将false转化为0

    • true + false = 1,将true转化为1,将false转化为0

5. 比较运算符(== , < , >)

类型转化规则:

当1层的对象类型与2层字符串进行比较,会将对象类型隐式转化为字符串类型,进行比较;

当2层的字符串类型或布尔类型与数值类型进行比较,会将2层的类型隐式转化为数值类型,进行比较;

当1层的对象类型与3层的数值类型进行比较,会先将对象类型转化为字符串类型再转化为数值类型;

当2层的类型相互比较,会均转化为数值类型再进行比较;

在这里插入图片描述

  • ==
    • String,Boolean,Number中的任意两个进行比较都会转化为Number类型再进行比较。
    • 引用类型与基本类型比较,则调用对象的valueOf()方法,将对象转换为基本类型再进行比较。
    • null与undefined比较或与自身比较,结果是true,与其他值比较都为false。
    • 如果一个操作值为NaN,则返回false
    • 两个引用类型比较,则比较他们是不是指向同一个对象
  • < , >
    • 两个操作值都是数值,进行数值比较
    • 两个操作值都是字符串,比较字符串对应的字符编码值
    • 有一个操作值是数值,将另一个操作值转化为数值,进行数值比较
    • 有一个操作数是对象,则调用valueOf() / toString()方法,得到的结果按照前面的规则执行比较
    • 有一个操作值是布尔值,将其转化为数值再进行比较
    • NaN不与任何值相等,包括它自己,它与任何值比较都返回false

五、参考文献

js中的一些隐式转换及总结https://www.cnblogs.com/ljk001/archive/2017/12/22/8086084.html
js基本数据类型、隐式转换https://blog.csdn.net/wwjwy123/article/details/80889668?spm=1001.2014.3001.5501

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,显示类型转换隐式类型转换也是两种不同的类型转换方式。 1. 显示类型转换:在 JavaScript 中,可以使用一些内置函数或操作符来进行显示类型转换。以下是一些常见的显示类型转换操作: - 使用 Number() 函数将值转换为数值类型。 - 使用 String() 函数将值转换为字符串类型。 - 使用 Boolean() 函数将值转换为布尔类型。 - 使用 parseInt() 或 parseFloat() 函数将字符串转换为数值类型。 - 使用 toString() 方法将数值或对象转换为字符串类型。 2. 隐式类型转换JavaScript 中的隐式类型转换是在表达式计算、赋值操作和比较运算等过程中自动发生的。这些隐式转换是根据 JavaScript 强制类型转换规则和规范进行的。以下是一些常见的隐式类型转换场景: - 字符串和数值之间的加法运算会将数值隐式转换为字符串并进行字符串拼接。 - 比较运算符(如 ==、>、< 等)会进行隐式类型转换来比较不同类型的值。 - 逻辑运算符(如 &&、|| 等)会根据 JavaScript 的真值表进行隐式类型转换来确定结果。 需要注意的是,JavaScript隐式类型转换有时可能会导致意外的结果,因此在编写代码时应当注意类型转换规则,避免产生不可预料的行为。同时,在需要明确类型转换的情况下,建议使用显示类型转换来提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值