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([]) // 0String 函数
原始类型转换
数值 :转换为相应的字符串;
字符串 : 转换后还是原来的值;
布尔值 : 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)) // _strString([]) // ''Boolean 函数
原始类型转换
undefined / null / -0 / +0 / NaN / '' (空字符串) 都会转换为 false 反之为 true
隐式类型转换 程序自动执行
四则运算 (+ - * /)
判断语句 (if 语句)
native调用 (console.log())
常见题目
[]+[] // "" []+{} // "[object Object]"{}+[] // 0 {}被看作是一个代码块 只执行+[]调用number函数true+true // 21+{a:1} // "1[object Object]"{}+{} // "[object Object][object Object]" // 谷歌浏览器{}+{} // NaN 第一个{}被看作是一个代码块 只执行+{}调用number函数 //火狐在node.js 中{}+{} 是谷歌的结果
注释
String([]) // ''Number([]) // 0Number(true) // 1String(true) // ‘true’String({}) // "[object Object]"Number({}) // NaNtypeof
网站