美文网首页
一文看懂Js隐式转换

一文看懂Js隐式转换

作者: 周末不敲键盘 | 来源:发表于2019-12-04 21:18 被阅读0次

隐式转换介绍:

什么玩意
在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算!

隐式转换规则:

1.转成string类型:+(字符串连接符)
2.转成number类型:++/--(自增自减运算符)+ - * %(算术运算符)> >= < <= != == === !==(关系运算符)
3.转成boolean类型:!(逻辑非运算符)
(一)字符串运算符跟算术运算符隐式转换规则混淆
  console.log(1+"true")     //'1true'
  //+是字符串连接符:String(1)+true = '1true'
  console.log(1+true)       //2
  //+是算术运算符:1+Number(true) = 1+1 =2
  console.log(1+undefined)  //NaN
  //+是算术运算符:1+Number(undefined) = 1+NaN
  console.log(1+null)       //1
  //+是算术运算符:1+Number(null) = 1+0 =1
(二)关系运算符
  console.log(1+"true")     //'1true'
  //+是字符串连接符:String(1)+true = '1true'
  console.log(1+true)       //2
  //+是算术运算符:1+Number(true) = 1+1 =2
  console.log(1+undefined)  //NaN
  //+是算术运算符:1+Number(undefined) = 1+NaN
  console.log(1+null)       //1
  //+是算术运算符:1+Number(null) = 1+0 =1
(三)逻辑非隐式转换与关系运算符隐式转换搞混淆
  //空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到[object Object],前后两个o大小有区别
  //1.关系运算符:将其他数据类型转换成数字
  //2.逻辑非:将其他数据类型使用Boolean()转成布尔类型
  //以下八种情况转换为布尔类型都会得到false---(0,-0,NaN,unfefined,null,'',false,document.all())

  console.log([] == 0)    //true
  //原理:[].valueOf().toString()结果为空字符串 Number('') == 0

  console.log(![] == 0)   //true
  //原理:本质是'![]'逻辑非表达式结果与 0 比较关系
  //逻辑非优先级高于关系运算符![] = false(空数组转换boolean值为true,然后取反得到false)
  //Number(false) = 0

  console.log([] == ![])  //true
  //原理:本质是[] 与 '![]'逻辑非表达式结果比较
  //(1)[].valueOf().toString() = ''
  //(2)![] =false
  //(3)NUmber('') == NUmber(false)

  console.log([] == [])   //false
  //引用类型数据存贮在堆中,比较的是存储地址,所以两者不相等

  console.log({} == {})   //false 同上

  console.log({} == !{})  //false
  //本质:{}与!{}这个逻辑非表达式作比较
  //(1){}.valueOf().toString() = '[object Object]'
  //(2)Number('[object Object]') = NaN
  //(3)Number(false) = 0
应用:
  //复杂数据类型在隐式转换时先转成String,然后在转成Number运算
  //先使用valueOf()方法获取原始值,如果原始值不是number类型,则使用toString()方法转换成string
  //再将string转成number运算

  console.log([1,2] == '1,2')           //true
  console.log({} == '[object Object]')  //true

//当a满足什么条件的时候,控制台可以输出为1

  var a = '?';
  if(a ==1 && a==2 &&a ==3){
    console.log(1)
  }

  var a = {
    i:0,
    valueOf:function(){
      return ++a.i
    }
  }

  var a = {
    i:0,
    toString:function(){
      return ++a.i
    }
  }

相关文章

  • 一文看懂Js隐式转换

    隐式转换介绍: 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • 类型转换

    js的类型转换分成显示和隐式,显式转换常用类型转换函数进行转换,隐式最多用在条件判断,通常是把字符转为布尔型。类型...

  • 隐式转换的规则

    问题:隐式转换的规则是什么 说起JS的隐式转换规则,我们可以说下JS的基础数据类型 JS的七中类型 我们所熟知的J...

  • JS的基本小结

    JS基本输出方式 JS数据类型 变量 常量 变量常量小练习 声明提前 隐式转换 显示转换/强制转换

  • JS隐式转换

    基础类型 大部分类型错误都被类型转换隐藏了 但少数会出现错误 2.运算符中的"+"运算是从左到右 当字符串与数字相...

  • JS 隐式转换

    隐式转换 数据类型基本数据类型: undefined string boolean null number sym...

  • js隐式转换

    一、 运算中存在的隐式类型转换 1, “+”运算符 var a = 11, b ='22';var c = a +...

  • js隐式转换

    当我们使用if进行判断时,()内的值会被会被转换为boolean类型 undefined:false null:f...

  • JS 隐式转换

    今天在复习隐式转换的时候发现了一些盲点,首先简要回顾一下隐式转换规则。 + 加号,既可以是算术运算符,也可以是字符...

网友评论

      本文标题:一文看懂Js隐式转换

      本文链接:https://www.haomeiwen.com/subject/rfqrgctx.html