百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> JavaScript中比力运算符隐式类型转换的介绍(附示例)
分享文章到:

JavaScript中比力运算符隐式类型转换的介绍(附示例)

发布时间:09/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是关于JavaScript中比力运算符隐式类型转换的介绍(附示例),有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

信赖大家在代码中经常看见 '==' 和 '===',但大家真的弄懂了比力运算符和其中的隐式转换嘛? 今天就从新认识下比力运算符。

全等运算符 ===

说明: 严厉匹配,不会类型转换,必需要数据类型和值完全一致

先推断类型,假如类型不是统一类型的话直接为false;

1 关于根本数据类型(值类型): Number,String,Boolean,Null和Undefined:两边的值要一致,才相等
      console.log(null === null)   // true
      console.log(undefined === undefined)  // true
   留意: NaN: 不会等于任何数,包罗它本人
   console.log(NaN === NaN)  // false 

2 关于复杂数据类型(援用类型): Object,Array,Function等:两边的援用地址假如一致的话,是相等的
     arr1 = [1,2,3];
     arr2 = arr1;
     console.log(arr1 === arr2)   // true

相等运算符 ==

非严厉匹配: 会类型转换,但是有前提前提一共有五种状况
(接下来的代码以 x == y 为示例)

x和y都是null或undefined:
规则: 没有隐式类型转换,无前提返回true

console.log ( null == undefined );//true
console.log ( null == null );//true
console.log ( undefined == undefined );//true

x或y是NaN : NaN与任何数字都不等
规则:没有隐式类型转换,无前提返回false

console.log ( NaN == NaN );//false

x和y都是string,boolean,number
规则:有隐式类型转换,会将不是number类型的数据转成number

console.log ( 1 == true );//true    (1) 1 == Number(true)
console.log ( 1 == "true" );//false   (1) 1 == Number('true')
console.log ( 1 == ! "true" );//false  (1) 1 == !Boolean('true')  (2) 1 == !true  (3) 1 == false  (4)1 == Number(false)
console.log ( 0 == ! "true" );//true
console.log(true == 'true') // false

x或y是复杂数据类型 : 会先猎取复杂数据类型的原始值之后再左比力
复杂数据类型的原始值: 先调取valueOf办法,然后调取toString办法
valueOf:一样默许返回本身
数组的toString:默许会调取join办法拼接每个元素并且返回拼接后的字符串

console.log ( [].toString () );//空字符串
console.log ( {}.toString () );//[object Object]
留意:  空数组的toString()办法会得到空字符串,
      而空对象的toString()办法会得到字符串[object Object] (留意第一个小写o,第二个大写O哟)

console.log ( [ 1, 2, 3 ].valueOf().toString());//‘1,2,3’
console.log ( [ 1, 2, 3 ] == "1,2,3" );//true  (1)[1,2,3].toString() == '1,2,3'  (2)'1,2,3' == '1,2,3'
console.log({} == '[object Object]');//true

x和y都是复杂数据类型 :
规则只比力地址,假如地址一致则返回true,不然返回false

var arr1 = [10,20,30];
var arr2 = [10,20,30];
var arr3 = arr1;//将arr1的地址拷贝给arr3
       
console.log ( arr1 == arr2 );//虽然arr1与arr2中的数据是一样,但是它们两个不一样的地址
console.log ( arr3 == arr1 );//true  两者地址是一样
       
console.log ( [] == [] );//false
console.log ( {} == {} );//false

经典面试题

留意:八种状况转boolean得到false: 0 -0 NaN undefined null '' false document.all()

console.log([] == 0); //true 
  // 剖析:(1) [].valueOf().toString() == 0  (2) Number('') == 0  (3) false == 0  (4) 0 == 0
console.log(![] == 0); //true
  // 剖析: 逻辑非优先级高于关系运算符 ![] = false (空数组转布尔值得到true)
        
console.log([] == []); //false
// [] 与右侧逻辑非表达式结果比力
//(1) [] == !Boolean([])   (2) [] == !true  (3)[] == false  (4) [].toString() == false  (5)'' == false   (6)Number('0') == Number(false)
console.log([] == ![]); //true

onsole.log({} == {}); //false
// {} 与右侧逻辑非表达式结果比力
//(1){} == !{} (2){} == !true  (3){} == false  (4){}.toString() == false  (5)'[object Object]' == false  (6)Number('[object Object]') == false
console.log({} == !{}); //false

变态面试题

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

//怎样完美a,使其准确打印1


//答案
var a = {
  i : 0,    //声明一个属性i
    valueOf:function ( ) {
     return ++a.i;    //每调取一次,让对象a的i属性自增一次并且返回
    }
 }
 if (a == 1 && a == 2 && a == 3){  //每一次运算时都会调取一次a的valueOf()办法
  console.log ( "1" );
 }

本篇文章到这里就已经全部完毕了,更多其他出色内容可以关注PHP中文网的JavaScript视频教程栏目!

以上就是JavaScript中比力运算符隐式类型转换的介绍(附示例)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有154人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板