类型转换

165 阅读2分钟

7种数据类型

原始类型

boolean / 

null / 希望表示一个对象被人为的重置为空对象,而非一个变量最原始的状态 

undedined /  希望表示一个变量最原始的状态,而非人为操作的结果 

number / 不区分整数和浮点数

string /  用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串

symbol 符号、标记。代表独一无二的值 , Symbol构建对象的Key,并调用和赋值,对象元素的保护作用

对象

object 


Undefined 与 null 的值相等,但类型不相等:

显式类型转换

Number 函数

String 函数

Boolean 函数

Number 函数 

原始类型转换  

数值  :转换后还是原来的值;

字符串 : 如果是字符串类型的数值,则转换之后为数值;否则得到NaN;空字符串为 0;

布尔值 : true 为 1,false 为 0;

undefined : 转成 NaN ;

null : 转成 0 。

对象类型转换

先调用对象自身的valueOf方法,如果该方法返回原始类型的值(数值、字符串、布尔值),则直接对该值使用Number方法,不再进行后续步骤;

如果valueOf 方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回原始值类型,则对该值使用 Number方法,不再进行步骤;

如果toString方法返回是符合类型的值,则报错。

let _obj = {    a:11  } 

  console.log(Number(_obj))   // NaN

过程


Number([]) // 0

 String 函数

原始类型转换

数值 :转换为相应的字符串;

字符串 : 转换后还是原来的值;

布尔值 : true 转为 ”true“ ,false 转为 ”false“ ;

undefined : 转为 ”undefined“ ;

null : 转为 ”null “。

对象类型转换

先调用对象自身的toString方法,如果toString方法返回原始类型的值(数值、字符串、布尔值),则直接对该值使用toString方法,不再进行后续步骤;

如果toString  方法返回复合类型的值,再调用对象自身的valueOf方法,如果valueOf方法返回原始值类型,则对该值使用 toString方法,不再进行步骤;

如果valueOf方法返回是符合类型的值,则报错。

let _str_obj = {    b:"b"  }

console.log(String(_str_obj))  //  [object Object]

过程

let _str_obj = {    b:"b",    toString(){      return {        b:1      }    },    valueOf(){      return '_str'    }  }

console.log(String(_str_obj)) // _str

String([]) // ''

Boolean 函数

原始类型转换

undefined / null / -0 / +0 / NaN / '' (空字符串)   都会转换为 false 反之为 true  

隐式类型转换 程序自动执行

四则运算  (+ - * /)

判断语句 (if 语句)

native调用 (console.log())

常见题目

 []+[]  // "" 

[]+{} // "[object Object]"

{}+[] // 0  {}被看作是一个代码块 只执行+[]调用number函数

true+true // 2

1+{a:1}   // "1[object Object]"

{}+{} // "[object Object][object Object]" // 谷歌浏览器
{}+{} // NaN   第一个{}被看作是一个代码块 只执行+{}调用number函数    //火狐

在node.js 中{}+{} 是谷歌的结果

注释

String([]) // ''
Number([]) // 0

Number(true) // 1

String(true)  // ‘true

String({})   // "[object Object]"

Number({}) // NaN

typeof


网站

js数据类型