>

比较运算符解析,javascript区别体系数据里面包车

- 编辑:www.bifa688.com -

比较运算符解析,javascript区别体系数据里面包车

想开贰个妙不可言的,运转如下 javascript :

最新的关于相比较符运算的地方有关JS相等比较算法(==)的法则

js中分化类别的基础数据里面能够转换,这种转移是有平整可寻的,并非轻巧的自由的。在js中有5种基础项目数据:string、number、boolean、null、undefined,在那之中,常用于总括依然相比的体系是日前二种。

if ('0') alert("'0' is true");
if ('0' == false) alert("'0' is false");

看示例

基础数据里面包车型客车调换

结果是,两次都 alert 了!那么 '0' 到底是 true 还是 false 呢?

        if ([]) {
            console.log("true")
        }
        if ([] != true) {
            console.log("false")
        }
        //result true false
其它类型转化数字
原始数据类型 目标类型Number
undefined NaN
null 0
false 0
true 1
数字串 相应的数字
不能转化的字符串 NaN

答案是:在js做比较的时候,有这么的三条规则:

[]到底是true还是false?

其它类型转化为字符串
原始数据类型 目标类型String
undefined undefined
null null
false false
true true
数字 数字字符串

• 如若比较的彼在那之中有bool,会把 bool 先转移为相应的 number,即 0 和 1

    console.log([] == ![]);
     //result true

 

• 借使比较的双边中有一方为number一方为string,会把string调换为数字

[]到底是true还是false?

未来和过去很不相同样品类的根底数据里面包车型大巴加法,数据先转移为number,然后调换为string(若是有string类型数据出席运算)

• 把string直接转变为bool的时候,空字符串‘'调换为 false,除此外的方方面面字符串调换为 true

持续分析

复制代码 代码如下:

以上那篇新瓶装旧酒js中0到底是 true 还是false就是笔者分享给我们的全体内容了,希望能给我们几个参照他事他说加以考查,也意在大家多多帮忙脚本之家。

        console.log(boolean([]));
        //result true

null undefined // 0 NaN

你恐怕感兴趣的文章:

  • javascript 使用正则test( )第叁回是 true,第三遍是false
  • JS中的==运算: [''''] == false —>true
  • javascript中return,return true,return false三者的用法及界别
  • js中各种类型的变量在if条件中是true还是false
  • JavaScript中缘何null==0为false而null大于=0为true(个人探究)

[]是true? 对的 []实在是true。 那为啥会现出前边二种结果吧?

null false // 0 0

连续深入分析

1 true // 1 1

咱俩了然表达式都是从左往右计算的

1 '1' //'11';数字与字符串相加结果是字符串

设原始表明式 0 == 0;

1 2 '3'  //'33';(1 2)的结果然后与'3'相加;这里要把每一步加法单独拆开来看,不然成为和下边同样的结果了.

率先来苏醒左边

1 (2 '3') //'123';先运算2 '3',然后1 '23'

0 == 0; true

's' null //'snull'

然后随着推算 

's' undefined // 'sundefined'

false == 0; true

's' true //'strue'

接着

1 true undefined 's' // 1 1 NaN 's'=2 NaN 's'=NaN 's'=NaNs

"" == false; true

对象参预加减法运算

接着

对象出席基础项目数据运算,先转化为底蕴项目。先调用其valueOf方法,假使回去的不是基础项目,再调用其toString方法,假若回到的还不是基础项目,则抛出荒谬。然则,Date数据刚好相反

[] == ""; true

复制代码 代码如下:

右臂还原达成

//为了有利于观望重写Date的toString方法和valueOf方法

        0 == 0;
        false == 0;
        "" == 0;
        [ ] == 0; 

Date.prototype.toString = function(){
    return 1;
}

紧接着来还原右侧

Date.prototype.valueOf = function(){

[ ] == false; true

    return 2;
}

接着

var a = new Date,
    b = new Date;

false == ![]; true

a b; // 调用toString,1 1,结果是2

所以

// 再重写toString方法

[ ] == ![]; true

Date.prototype.toString = function(){

左臂还原落成
//出自 尊重作者费劲劳动成果,转发请注脚出处,感激!

    return {};
}

终极表现结果

var c = new Date,
    d = new Date;

        0 == 0;
        false == 0;
        "" == 0;
        [] == 0;
        [] == false;
        [] == ![]; 

c d; // 调用toString方法返回的不是基础项目,再调用valueOf,2 2,结果是4

规律深入分析

// 再重写valueOf方法
Date.prototype.valueOf = function(){

        //表达式从左往右计算
        [ ] == ![];     //![]转为为bool 
        [ ] == false;   //上一步的结果 两者中有bool,会把 bool 先转换为对应的 number
        [ ] == 0;       //上一步的结果 有一方为number一方为string,会把string转换为数字 [ ].toString()
        "" == 0;        //上一步的结果 把string直接转换为bool的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true
        false == 0;     //上一步的结果 两者中有bool,会把 bool 先转换为对应的 number
        0 == 0;         //上一步的结果

    return {};
}

总结:

var e = new Date,
    f = new Date;

相比艺术遵从如下
1两个中有bool,会把 bool 先转移为对应的 number
2有一方为number一方为string,会把string转变为数字 (不是string的会先转成string)
3把string直接调换为bool的时候,空字符串‘’转变为 false,除别的的总体字符串转变为 true 

e f; // 报错

PS:全数数组和目的的bool值都以true,null是false

把地点的例子换到Object或然别的连串能获取相应的结果,不过是先调用valueOf,再调用toString。

上述仅是个人深入分析,更显贵的请查找官方质地,什么人找到资料了麻烦留言提供下 多谢了!

' '号的神奇成效

//出自 尊重小编费劲劳动成果,转发请注解出处,多谢!

数据前有加号‘ ',能够让字符串转化为数字

 

复制代码 代码如下:

 

'1' 1 // 2

 

's' 2 // NaN

 

注:第二遍,格式倒霉,纰漏多,招待我们拍砖

 

您大概感兴趣的稿子:

  • 浅谈JavaScript数据类型及转变
  • Javascript基础教程之数据类型调换
  • JavaScript中的值类型调换介绍
  • javascript类型转变示例
  • javascript类型调换使用方式
  • 浅析JavaScript中的隐式类型调换
  • 接纳javascript:将别的类型值转变到布尔类型值的化解方法详解
  • Javascript 类型转变方法
  • javascript显式类型调换实例解析

 

 

 

 

 

本文由必发88官网发布,转载请注明来源:比较运算符解析,javascript区别体系数据里面包车