美文网首页
类型和语法--强制类型转换

类型和语法--强制类型转换

作者: 怪兽别跑biubiubi | 来源:发表于2019-07-11 14:29 被阅读0次

    1、值类型转换

    将值从一种类型转换为另一种类型通常称为类型转换(type casting),这是显式的情况;隐 式的情况称为强制类型转换(coercion)。

    也可以这样区分:类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时(runtime)。

    “隐式强制类型 转换”(implicit coercion)和“显式强制类型转换”的区别:我们能够从代码中看出哪些地方是显式强制类型转换,而隐式强制 类型转换则不那么明显,通常是某些操作产生的副作用。

    例如:

    var a = 42;   // number
     
    var b = a + "";         // 隐式强制类型转换   string
     
    var c = String( a );    // 显式强制类型转换  string
    

    首先变量b强制类型是隐式的," + "运算符的其中一个操作数是字符串,所以在此是字符串拼接,结果是数字42被强制转换为字符串的42;
    变量c则是通过String显示的将a强制转换为字符串;

    2、抽象值操作

    ToString、ToNumber 和 ToBoolean

    2.1、ToString

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

    数组的默认 toString() 方法经过了重新定义,将所有单元字符串化以后再用 "," 连接起 来:

    var a = [1,2,3]; 
     
    a.toString(); // "1,2,3"
    

    toString() 可以被显式调用,或者在需要字符串化时自动调用。

    对大多数简单值来说,JSON 字符串化和 toString() 的效果基本相同,只不过序列化的结 果总是字符串:

    JSON.stringify( 42 );   // "42" 
    JSON.stringify( "42" ); // ""42"" (含有双引号的字符串)
    JSON.stringify( null ); // "null" 
    JSON.stringify( true ); // "true"
    

    JSON.stringify(..) 在对象中遇到 undefined、function 和 symbol 时会自动将其忽略,在 数组中则会返回 null(以保证单元位置不变)。

    例如:

    JSON.stringify( undefined );      // undefined 
    JSON.stringify( function(){} );   // undefined 
     
    JSON.stringify(    [1,undefined,function(){},4] );    // "[1,null,null,4]" 
    JSON.stringify(    { a:2, b:function(){} } );                            // "{"a":2}"
    

    对包含循环引用的对象执行 JSON.stringify(..) 会出错。

    toJSON() 应该“返回一个能够被字符串化的安全的 JSON 值”,而不是“返回 一个 JSON 字符串”。

    相关文章

      网友评论

          本文标题:类型和语法--强制类型转换

          本文链接:https://www.haomeiwen.com/subject/auqrkctx.html