• 深入js系列-类型(显式强制转换)


    什么是显式

    这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是“显式”,相反你不知道的话,对你就是“隐式”

    抽象操作

    字符串、数字、布尔值之间类型转换的基本规则 ES5定义了一些操作,诸如ToString、ToNumber、ToBoolean、ToPrimitive抽象操作

    1.ToString 负责处理非字符到字符串的强制类型转换

    undefined => "undefined"
    null => "null"
    number => "number"  极大数和极小数用指数表示
    boolean => "boolean"
    Symbol => "Symbol"
    Object => instance.toString || Object.prototype.toString //规则由抽象操作ToPrimitive抽象操作里完成  
    

    2.ToNumber 非数字到数字的强制类型转换

    undefined => NaN
    null => 0
    boolean => true 1 false 0
    Symbol => 无法转换,本身用途是为了解决命令冲突
    string => 数字常量规则,失败为NaN,且0开头的十六进制按照十进制处理
    Object => 由抽象操作ToPrimitive抽象操作,检查该值是否有valueof方法并且返回基本类型,有就对返回值进行强制转换,没有就使用toString的返回值来强制转换,两者都没有得到基本值,会产生TypeError错误,更详细的转换规则会在ToPrimitive抽象操作详解
    

    3.ToBoolean

    3.1 假值(falsy value)

    undefined
    null
    false
    +0、-0、NaN
    ""
    假值对象 document.all
    

    假值对象是游览器废弃对象之后,为了分辨版本将其修改为假值对象,document.all就是其中一个例子

    那为什么它要是假值呢?因为我们经常通过将document.all 强制类型转换为布尔值(比如
    在if 语句中)来判断浏览器是否是老版本的IE。IE 自诞生之日起就始终遵循浏览器标准,
    较其他浏览器更为有力地推动了Web 的发展。
    if(document.all) { /* it’s IE */ } 依然存在于许多程序中,也许会一直存在下去,这对
    IE 的用户体验来说不是一件好事。
    虽然我们无法彻底摆脱document.all,但为了让新版本更符合标准,IE 并不打算继续支持
    if (document.all) { .. }。
    “那我们应该怎么办?”
    “也许可以修改JavaScript 的类型机制,将document.all 作为假值来处理!”

    3.2 真值 除假值列表之外的值

    显式强制类型转换

    1.1字符串和数字之间的显式转换

    var a = 42;
    var b = String( a );
    
    var c = "3.14";
    var d = Number( c );
    b; // "42"
    d; // 3.14
    
    var a = 42;
    var b = a.toString(); //直接调用toString
    
    var c = "3.14";
    var d = +c; // +作为一元运算符来将操作数强制转换为数字
    b; // "42"
    d; // 3.14
    

    1.2.显式解析数字字符串 这里要注意的是,解析和转换还是有明显区别,转换不允许出现非数字字符串,看下面例子

    var a = "42";
    var b = "42px";
    Number( a ); // 42
    parseInt( a ); // 42
    Number( b ); // NaN
    parseInt( b ); // 42
    

    2显式转换为布尔值 非布尔值转换到布尔值的情况

    // 使用Boolean(),不过不常用
    var a = "0";
    Boolean( a ); // true
    var b = [];
    Boolean( b ); // true
    var c = {};
    Boolean( c ); // true
    var d = "";
    Boolean( d ); // false
    var e = 0;
    Boolean( e ); // false
    var f = null;
    Boolean( f ); // false
    var g;
    Boolean( g ); // false
    
    //更加常用的方式 !!
    !!a // boolean,里面的!将非布尔值转换到布尔值并取反,加一个!对取反的结果再次取反,得到原本的布尔值
    
  • 相关阅读:
    两种常用的启动和关闭MySQL服务
    磁盘分区(20G升50G)
    Google的一些功能和软件
    Google辅助类软件
    Google协作平台
    Google邮箱:Gmail国际顶级邮箱
    Google表单
    Google幻灯片
    在VC/MFC中嵌入Google地图——图文并茂
    与走在创业路上的学子交流——记网维“海大快点”创业团队
  • 原文地址:https://www.cnblogs.com/sefaultment/p/10574336.html
Copyright © 2020-2023  润新知