zoukankan      html  css  js  c++  java
  • 显式强制类型转换

    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来进行显式的强制类型转换。




  • 相关阅读:
    挖矿病毒 netstat与ss重要区别
    leetcode 正则表达式匹配
    DNS重新绑定攻击
    Mac OS ssh 禁用密码登陆
    linux alias 别名在Bash脚本内不起作用 远程执行alias 命令不工作
    centos 7 搭建 l2tp
    psacct 软件包工具监视所有用户执行的命令
    随机密码生成
    Linux 进程 cpu 使用排序 内存 使用排序
    nginx 反向代理 uri 重写
  • 原文地址:https://www.cnblogs.com/cheemon/p/6054550.html
Copyright © 2011-2022 走看看