强制类型转换

JavaScript中的强制类型转换总是返回标量值,如数字,字符串,布尔值,不会返回对象和函数。

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

然而在JavaScript中统称为强制类型转换。

ToString

规范的9.8中定义了抽象操作ToString,它负责处理非字符串的强制类型转换

基本类型值的字符串转换规则为:null转化为”null”,undefined 转化为 “undefined”,true 转化为 “true”。

ToNumber

其他true转换为1,false转为0,undefined转化为NaN,null转为0

ToBoolean

假值

  • undefined
  • null
  • false
  • +0, -0 和 NaN
  • “”

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

字符串和数字之间的转换是通过String(…)和Number(…)这两个内建函数来实现的。注意他们前面没有new关键字,并不创建封装对象

var num = 1
var str = 'str'
var arr = [1,2,3]
var boo = true
var obj = new Object()
var und = undefined
var oNull = null
const sym = Symbol()
function foo() {}

console.log('******   []   *****');
console.log( [] == 0 )
console.log( [] == null )
console.log( [] == undefined )
console.log( [] == false )
console.log( [] == '' )
// true
// false
// false
// true
// true

console.log('******   0   *****');
console.log( 0 == null )
console.log( 0 == undefined )
console.log( 0 == false )
console.log( 0 == '' )
// false
// false
// true
// true

console.log('******  null   *****');
console.log( null == '' )
console.log( null == undefined )
console.log( null == false )
console.log( null == '' )
// false
// true
// false
// false

console.log('******  undefined   *****');
console.log( undefined == '' )
console.log( undefined == false )
console.log( undefined == '' )
// false
// true
// false
// false

console.log('******  false   *****');
console.log( false == '' )
// true

参考
《你不知道的JavaScript(中)》第一部分第四章


  Reprint please specify: 云深不知处 强制类型转换

 Previous
闭包 /** * bar()是定义在 foo() 里的内部函数,仅在该函数体内可用。 * bar()内没有自己的局部变量,然而它可以访问到外部函数的变量, * bar() 可以使用父函数 foo() 中声明的变量 name */ f
2019-02-17 卓文智
Next 
js数据类型判断 js数据类型判断
1. typeof 可以对基本类型做出准确的判断,但对于引用类型力不从心var num = 1 var str = 'str' var arr = [1,2,3] var boo = true var obj = new Object()
2019-02-17
  TOC