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