将值从一种类型转换为另一种类型通常称为类型转换(type casting),这是显式的情况;隐式的情况称为强制类型转换(coercion)。
    js 中的强制类型转换总是返回标量基本类型值,如字 符串、数字和布尔值,不会返回对象和函数。
    区分:类型转换发生在静态类型语言的编译阶段,而强制类型转换则发生在动态类型语言的运行时(runtime)。
    js中通常统称为强制类型转换,作者倾向于用“隐式强制类型转换”(implicit coercion)和“显式强制类型转换”(explicit coercion)来区分。
    显式强制类型转换是能够从代码中看出来的,隐式强制类型转换是那些不明显的,通常是某些操作产生的副作用。如:

    1. var a = 42;
    2. var b = a + ""; // 隐式强制类型转换
    3. var c = String( a ); // 显式强制类型转换

    对变量 b 而言,强制类型转换是隐式的;由于 + 运算符的其中一个操作数是字符串,所以是字符串拼接操作,结果是数字 42 被强制类型转换为相应的字符串 “42”。而 String(..) 则是将 a 显式强制类型转换为字符串。
    “显式”和“隐式”以及“明显的副作用”和“隐藏的副作用”,都是相对而言的。
    如果明白a + “”是怎么回事,那么对你来说就是“显式”的。相反,如果你不知道String(..) 可以用来做字符串强制类型转换,它对你来说可能就是“隐式”的。