显式强制类型转换

1. 日期显式转换为数字
  1. +new Date; //1478845373322
javascript有个奇特的语法,即构造函数没有参数时可以不用带()。
不过最好还是使用ES5中新加入的 静态方法:Date.now()。
2. ~运算符
按位运算符只适用于32位整数,运算符会强制操作数使用32位格式。这是通过抽象操作ToInt32实现的。
ToInt32 首先执行ToNumber 强制类型转换,比如“123”会先转换为123,然后再执行ToInt32。

按位运算符有6个: & 按位与     | 按位或     ^ 按位异或     ~ 取反     >> 右移     << 左移

但这严格来说并不是强制类型转换(因为返回值类型并没有发生变化),但按位运算符(例如 | 或~)和某些数字一起使用时会产生类似强制类型转换的效果,返回另外的数字。
例如 | 运算符 0|x仅执行ToInt32转换。但以下特殊字符无法以32格式呈现,因此ToInt32返回0。
  1. 0|-0;//0
  2. 0|NaN;//0
  3. 0|Infinity;//0
  4. 0|-Infinity;//0
~ 首先将值强制类型转换为32位数字,然后执行按位运算符操作“非”(对每个字符进行反转)。
另外一种说法,源自早期的计算机科学和离散数学:~返回2的补码。
~x等同于 -(x+1);
  1. ~5; //-6
3. 字位截除 ~~
~~中第一个 ~ 执行ToInt32并反转字位,然后第二个 ~ 再进行一次字位反转,将所有的字位反转为原值,最后得到的仍是ToInt32的结果。
~~只适用于32位数字,且它对负数的处理与Math.floor(...)不同。
  1. Math.floor(-88.9); //-89
  2. ~~-88.9; //-88
~~可以将值截除为一个32位整数,x|0也可以。但最好是使用~~,出于运算符优先级的考虑。
4. 显式解析数字字符串
解析允许字符串中含有非数字字符串,从左到右解析,遇到非数字字符则停止,而转换不允许出现非数字字符,否则会失败并返回NaN。
  1. var a="56";
  2. var b="56px";
  3. Number(a); //56
  4. parseInt(a); //56
  5. Number(b); //NaN
  6. parseInt(b); //56
ES5之前的parseInt32(...) 有一个坑,如果没有第二个参数来指定转换的基数,它会根据字符串的第一个字符来自行决定基数。
如果第一个字符是x或者X,则转换为十六进制数字。如果是0,则转换为八进制数字。
ES5开始,parseInt32(...) 默认转换为十进制。
5. 显式转换为布尔值  Boolean(...)
一元运算符!显式的将值类型转换为布尔值,但同时会将真值转换为假值,假值转换为真值。所以显式强制类型转换为布尔值常用的做法是!!,第二个!会将结果反转为原值。
  1. var a="0";
  2. var b=[];
  3. var c={};
  4. !!a; //true
  5. !!b; //true
  6. !!c; //true
下面这段代码:
  1. var a=56;
  2. var b=a?true:false;
a 首先被强制转换为布尔值才能进行条件判断,成为“显式的隐式”。建议使用Boolean(a)和!!a来进行显式的强制类型转换。




原文地址:https://www.cnblogs.com/cheemon/p/6054550.html