本文主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。