美文网首页程序员
js隐式转换问题

js隐式转换问题

作者: 祝我好运zz | 来源:发表于2018-10-26 20:19 被阅读0次
        //当下面按钮全选中时,上面按钮也选中
         var flag=true;
         $tbodyCheckboxs.each(function(i){
          if($tbodyCheckboxs.eq(i).prop('checked')!='checked'){
            flag=false;
          }
         }) 
         $('thead input').prop('checked',flag);

今天在项目里写复选框的全选功能时,遇到了一个坑,这个坑就是js的隐式转换,虽然知道这个东西,但是却记错了,搞了半天才发现原来是这么一个小错误。

问题:不管下面的复选框选没选中,$tbodyCheckboxs.eq(i).prop('checked') != ‘checked’都返回true,导致flag都会变成false,从而总的复选框永远不会被选中。

(首先清楚的是,表单元素的一些属性只有一个属性值,且值就是本身时,在用js或jq操作的时候,它的值是布尔值(获取的值是布尔值,设置值的时候是布尔值或者能转换成对应布尔值的其他类型的值);
所以在这里$tbodyCheckboxs.eq(i).prop('checked')的值是true或false,本来这里就让$tbodyCheckboxs.eq(i).prop('checked') !=true就没有任何问题,但我知道js在判断全等和全不等的时候会有类型转换,所以写了‘checked’,结果因为对相等操作符的类型转换规则记忆有误,导致错误,一直判断的是 布尔值 != ‘checked’。)

总的来说,在转换不同的数据类型时,相等和不相等操作符遵循以下基本规则:
1.如果有一个操作数是布尔值,则在比较相等性之前现将其转化成数值----false为0,true为1;
2.如果一个操作数是字符串,一个是数值,在判断相等性之前,先把字符串转换为数值|;
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型的值去比较
4.null和undefined相等,它俩在判断相等性时,不会类型转换;
5.NaN不和任何值相等;
6.两个都是对象,则判断是不是同一个对象。

总结这么多,一句话,为了避免错误,以后尽量用全等===和全不等!==

相关文章

  • 隐式转换的规则

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

  • js中的类型转换

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

  • js隐式转换问题

    今天在项目里写复选框的全选功能时,遇到了一个坑,这个坑就是js的隐式转换,虽然知道这个东西,但是却记错了,搞了半天...

  • JS中的隐式转换

    隐式转换 写在前面 在JS中有一个在学习过程和面试过程中很常见的问题就是JS的隐式转换,经常会有各种各样的“坑”等...

  • 类型转换

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

  • 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隐式转换问题

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