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

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 字符串”。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容