,,JavaScript中的一些隐式转换和总结(推荐)

,,JavaScript中的一些隐式转换和总结(推荐)

本文主要介绍了JavaScript中的一些隐式转换和总结,非常好,很有参考价值。有需要的朋友可以参考一下。

js中不同数据类型之间的比较和转换规则如下:

1. 对象和布尔值比较

当比较一个对象和一个布尔值时,对象首先被转换成一个字符串,然后转换成一个数字,布尔值直接转换成一个数字。

[]==true;//false []转换为字符串“”,然后转换为数字0。True被转换成数字1,所以它是false。

2. 对象和字符串比较

将对象与字符串进行比较时,将对象转换为字符串,然后将两者进行比较。

[1,2,3]==' 1,2,3'/true [1,2,3]转换成' 1,2,3 ',再与' 1,2,3 '组合,所以结果为true;

3. 对象和数字比较

用数字比较对象时,对象先转换成字符串,再转换成数字,再和数字比较。

[1]==1;//true `对象先转换成字符串,再转换成数字,然后两者比较[1]='1'=1所以结果为true。

4. 字符串和数字比较

将字符串与数字进行比较时,会将字符串转换为数字,然后将两者进行比较。

1'==1 //真

5. 字符串和布尔值比较

当比较一个字符串和一个布尔值时,两者都被转换成数值,然后进行比较。

1’==true;//真

6. 布尔值和数字比较

比较布尔值和数字时,布尔值被转换成数字,两者进行比较。

true==1 //true

很多刚接触js的童鞋看到这么多换算规则都很迷茫。其实规则很简单。你可以把这张图写在边上。

如图,任意两个类型进行比较时,如果不是同一类型,就会进行相应的类型转换,如图所示。例如,如果将一个对象与布尔值进行比较,则object=string=numeric Boolean=numeric。

另外,我们来看看一些需要‘特殊照顾’的。

看一个有趣的问题。

[]==false;

![]==false;

两者的结果都是真的。第一个是,object=string=numeric value 0。False被转换为数值0。这个是真的,应该没问题。

第二个前面还有一个!它被直接转换成布尔值,然后被反转。转换为布尔值时,空字符串(')、NaN、0、null、undefined都为真,所以![][]=真的逆为假,所以[]==假为真。

还有一些事情需要记住,比如:

Undefined==null //true undefined与null比较时返回true,与其他值比较时返回false。

数字(空)//0

曾经看到过这样一段代码:(!(~ []) {})[ - [~ ''][ []]*[~ []] ~~![]] ({} [])[[~![] * ~ []]=SB,你信吗?当时吓到宝宝了。

刚接触Js的时候,我很迷茫。正是因为它‘善变’。下面我总结一下:

7. JS的数据类型:数字、布尔、字符串、未定义、空、符号(ES6新定义)和对象(注意:数组是一个特殊的对象)

Typeof 7由type: number布尔字符串对象未定义的对象函数返回

MDN是这样介绍JavaScript的:JavaScript是一种弱类型或动态语言。这意味着你不必事先声明变量的类型,类型会在程序运行过程中自动确定。这也意味着您可以使用同一个变量来存储不同类型的数据。

8. 下面来看下常见的隐式转换:

基本类型:

运算符(,-,*,/,%)在运算时转换类型。

" "操作员:

总结:当加运算符、字符串等类型时,其他类型会转换为字符串;否则,它将转换为数字类型。注意:undefined转换成数字为' nan ',任何加了NaN的数字都是NaN。

对于其他运算符,基本类型转换为Number,带有' 1a '、' a1 '等字符的字符串类型转换为NaN,与undefined相同。

提示:(1) NaN不等于包括自身在内的任何值,所以判断一个值是否为NaN,用'!=='就行。

(2)转换为布尔类型false的有:null,0,'',undefined,NaN,false。

(3)Number()和parseInt()都可以将对象转换成数字类型,Number函数比parseInt函数严格得多。基本上只要有一个字符不能转换成数值,整个字符串都会转换成NaN。

  Object类型

当对象用基本类型操作时:

var obj={

toString: function(){

返回6;

},

valueOf:函数(){

返回5;

}

};

var obj1={

valueOf:函数(){

返回“a”;

},

toString: function(){

返回“b”;

}

};

当obj,obj1用Number()和String()转置

总结:数字类型会先调用valueOf(),字符串类型会先调用toString(),如果结果是原值,则返回原值,否则继续使用toString或valueof(),继续计算,如果结果不是原值则抛出类型错误;

看看下面的情况:

为什么{} []=0?因为javascript在运行时将第一个{}作为空代码块,所以相当于[]=0。而{} 5=5,也是如此。

总结:

1.类型错误可能被类型转换隐藏。

2.“”可以表示字符串连接和算术加法,具体取决于其操作数。如果一个是字符串,那么,它是字符串连接。

3.对象通过valueOf方法将自身转换为数字,并通过toString方法将自身转换为字符串。

4.对于具有valueOf方法的对象,应定义相应的toString方法来返回相等数字的字符串形式。

5.在检测一些未定义的变量时,应该使用typeOf或者与undefined进行比较,而不是直接使用真值运算。

总结

以上是边肖介绍的JavaScript中的一些隐式转换和总结(推荐)。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。谢谢您的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: