资讯专栏INFORMATION COLUMN

javaScript学习之隐式转换

peixn / 1611人阅读

摘要:搬家篇三开胃菜因为大于等于的比较,不是相等的比较,所以值得注意的操作符一元操作符通过进行转换其中包括号运算符,号运算符,都是经转换逻辑运算符等价于将操作数进行布尔值类型转换位操作当一边操作数为时,可等价于操作数为由以下变化可以证得加号运算

搬家篇三
开胃菜
[] == ![]                  //true  ==> "" == false
123 ^ []                   //123   ==> 123 ^ 0
~{}                        //-1    ==> ~0
{} >= {1,2}                //true  ==>因为大于等于的比较,不是相等的比较,所以[object Object] >=[object Object]
[null] == ""               //true  ==> [""] == ""
值得注意的操作符:

一元操作符:通过Number()进行转换;其中包括*号运算符,/号运算符,都是经Number()转换

+undefined   //NaN

逻辑运算符:!等价于Boolean(),将操作数进行布尔值类型转换

位操作:~, |, &, ^;当一边操作数为NaN时,可等价于操作数为0;

//由以下变化可以证得:
NaN ^ NaN ^ NaN = 0

加号运算符,比较复杂

优先级最高的是字符串,任何操作数与字符串相加都将其String(x)成字符串,再进行字符串拼接

console.log("a" + 1);           //"a1"
console.log("a" + "1");         //"a1"
console.log("a" + false);       //"afalse"
console.log("a" + undefined);   //"aundefined"
console.log("a" + NaN);         //"aNaN"
console.log("a" + null);        //"anull"
console.log("a" + {});          //"a[object Object]"

其次number,而object在正常情况下输出的就是string类型

//console.log(1 + "1");     //"11"
console.log(1 + 1);         //2
console.log(1 + true);      //2 
console.log(1 + undefined); //NaN
console.log(1 + NaN);       //NaN
console.log(1 + null);      //1
console.log(1 + {});        //"1[object,Object]"

当一方为Boolean,或者两方都是Boolean时,都将其进行Number处理,同理undefined与null也一样

console.log(true + true);      //2 
console.log(true + undefined); //NaN
console.log(true + NaN);       //NaN
console.log(true + null);      //1
console.log((true + [NaN]));   //"trueNaN"

减号,则将两边都进行Number()处理

比较运算:==, >, <, >=, >=, != 遵循规则(摘自高程3):

1.null和undefined是相等的  
2.要比较相等之前,不能将null和undfined转换成其他任何值
3.如有一个操作数为NaN,相等操作符返回fasle,不相等操作符返回true, NaN不等于NaN
4.两个对象之间的比较,两者指向同一个对象(地址相同),相等操作符返回true,否则返回false

值得注意的是:对象间的>=与==(!=)比较方式是不同的,前者是toString()返回值的比较,后者是引用地址的比较
当都是两边都是字符串时,按字符编码大小进行比较
当一方操作数为boolean,string,object,转成number类型的数值再进行比较;

console.log("NaN" == NaN);         //false
console.log(undefined == null);    //true
console.log({} >= {1:2});          //true
console.log({1:2} != {});          //true
console.log({} == {1:2});          //false
console.log([1] == [1]);           //false
console.log(null == 0);            //false

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97931.html

相关文章

  • JavaScript习之Object(下)this

    摘要:为什么用能够动态的取值,实现了隐式传递一个对象的引用上面的例子中想在中取的值用就能简单搞定一定程度上实现了动态取值这个就是绑定了,这个就是上下文对象也就是调用栈是什么始终是一个对象,函数在被调用时发生绑定,具体绑定了什么看调用的位置,有一定 this 为什么用this this能够动态的取值,实现了隐式传递一个对象的引用 var obj = { ...

    liuyix 评论0 收藏0
  • javaScript习之数值强转换

    摘要:搬家篇二数据类型分为基本数据类型和引用数据类型基本数据引用数据当,小数点后大于等于位时会自动转换成科学计数法当,当整数部分大于等于位时会自动转换成科学计数法。 搬家篇二 javascript数据类型分为基本数据类型和引用数据类型 基本数据:Number, Boolean, Undefined, Null, String; 引用数据:Object; 当0.000...01,小数点后大于等...

    klivitamJ 评论0 收藏0
  • JavaScript机器习之线性回归

    摘要:不能用于机器学习太慢幻觉矩阵操作太难有函数库啊,比如只能用于前端开发开发者笑了机器学习库都是开发者机器学习库神经网络神经网络自然语言处理卷积神经网络一系列库神经网络深度学习我们将使用来实现线性回归,源代码在仓库。 译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。 原文: Machine Learning with JavaScript : Part 1 ...

    gitmilk 评论0 收藏0
  • JavaScript机器习之KNN算法

    摘要:是的缩写,它是一种监督学习算法。每一个机器学习算法都需要数据,这次我将使用数据集。其数据集包含了个样本,都属于鸢尾属下的三个亚属,分别是山鸢尾变色鸢尾和维吉尼亚鸢尾。四个特征被用作样本的定量分析,它们分别是花萼和花瓣的长度和宽度。 译者按: 机器学习原来很简单啊,不妨动手试试! 原文: Machine Learning with JavaScript : Part 2 译者: Fund...

    enrecul101 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<