js隐式转换
2021-04-28 09:48:17 4 举报
AI智能生成
js类型转换
作者其他创作
大纲/内容
布尔值到数字
!!
逻辑运算符 || (或)和 && (与)
&& 和 || 运算符的返回值并不一定是布尔类型,而是两个操作数其中一个的值
&& 遇到假值就返回;<br>|| 遇到真值就返回;
a=1;b=0;c=false;<br>a&&b&&c;//0
a || b;相当于:a?a:b<br>a && b;相当于: a?b:a
ToString
非字符串到字符串的强制类型转换
JSON 字符串化有用到ToString
ToBoolean
假值:<br>undefined<br>NAN,+0,-0<br>null<br>false<br>""<br><br><br>
对象与非对象
var a = 42;<br>var b = [ 42 ];<br><br>a==b;//true
[42]首先调用ToPromitive抽象操作,返回“42”,变成“42”==42;“42”调用Number方法变成42==42
字符串和数字 “+”运算符是加法还是拼接
结论: <br> 1.如果操作数是字符串,则拼接;<br>2.如果操作数是数组,但是能够通过ToPrimitive转换为字符串,则执行拼接;
var a = [1,2]; var b = [3,4];<br>a + b; // "1,23,4"
[1,2].valueOf().toString();//"1,2"<br>[3,4].valueOf().toString();//"3,4"<br>"1,2"+"3,4";//"1,23,4"
var a = "42"; var b = "0";<br>var c = 42; var d = 0;<br>a + b; // "420" c + d; // 42
<b><u><font color="#c41230">坑</font></u></b>:[]+{} //"[object Object]"<br> {}+[] //0
a+"" (隐式)=>先调用valueOf,再调用toString()<br>String(a) (显式)=>直接调用toString()
日期显式转换为数字:
var d = new Date( "Mon, 18 Aug 2014 08:53:06 CDT" ); +d; // 1408369986000
获取当前时间戳:var timestamp = +new Date();
奇特的 ~ 运算符
位运算符只适用于 32 位整数,通过抽象操作符ToInt32实现的
ToInt32 首先执行 ToNumber 强制类型转换,比如 "123" 会先被转换为 123 ,然后再执行 ToInt32
它首先将值强制类型转换为 32 位数字,然后执行字位操作“非”(对每一个字位进行反转)
~x 大致等同于 -(x+1)
字位截除 <font color="#c41230">~~</font>
隐式强制类型转换为布尔值ToBoolean()<br>(非布尔值会被隐式强制类型转换为布尔值)
if (..)语句中的条件判断表达式
for ( .. ; .. ; .. )语句中的条件判断表达式(第二个)
while (..)和do..while(..)循环中的条件判断表达式
? :中的条件判断表达式
逻辑运算符 || (逻辑或)和 && (逻辑与)左边的操作数(作为条件判断表达式)
符号的强制类型转换
1.允许从符号到字符串<b>显式</b> 强制类型转<br>2.<b>隐式</b> 强制类型转换会产生错;<br>3.符号不能够被强制类型转换为数字(显式和隐式都会产生错误),但可以被强制类型转换为布尔值(显式和隐式结果都是 true )。
var s1 = Symbol( "cool" );<br>String( s1 ); // "Symbol(cool)"<br>var s2 = Symbol( "not cool" ); s2 + ""; // TypeError
ToNumber
将非数字转换为数字
true 转换为 1;<br>false转换为0;<br>undefined 转换为 NaN;<br>null 转换为 0
宽松相等==和严格相等===
双等和三等的区别?
都会检查操作数的类型
如果两个值类型相同,则执行相同的算法。<br> 如何类型不同,需要考虑有没有强制类型转换的必要,如果有则用==,如果没有则用===。JS引擎实现上会有微秒级(百万分之一秒)的差别<br> ==在比较两个不同类型的值时会发生<b>yin式类型转换</b>,会将其中之一或两者都转换为相同的类型后再 进行比较。<br>
结论:== 允许在相等比较中进行强制类型转换,而 === 不允许。
抽象关系比较
var a = [ "42" ]; var b = [ "043" ];<br>a<b; //false
var a = [ 4, 2 ]; var b = [ 0, 4, 3 ];<br>a<b; //false
var a = { b: 42 }; var b = { b: 43 };<br>a<b;//false
var a = { b: 42 }; var b = { b: 43 };<br>a<b; //false a == b; // false a>b; //false<br>a <= b; // true a >= b; // true
实际上JavaScript中<=是“不大于”的意思
var a = [ 42 ]; var b = "043";<br>a < b; // false -- 字符串比较! Number( a ) < Number( b ); // true -- 数字比较!
0 条评论
下一页