1.数据类型和类型转换
- 数值(number):整数和小数
- 字符串(string):文本
- 布尔值(boolean):表示真伪的两个特殊值,true和false
- undefined:表示“未定义”或不存在,没有任何值
- null:表示空值,值为空
- 对象(object):各种值组成的集合
- Symbol:ES6新增,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
原型数据类型和引用数据类型两大类。
类型转换##
-
转Boolean:在条件判断时,除了
undefined,null,false,NaN,'',0,-0,
其他所有值都转为true -
转换为数值(number)类型:
使用
Number()方法转换
,在ES5
规范中定义了抽象操作ToNumber
- Undefined类型的值转换为
NaN
- Null类型的值转换为0
- Boolean类型的值,true转换为1,false转换为0
- String类型的值转换如同使用Number()函数进行转换,如果包含非数字值则转换为
NaN
,空字符串为0 - Symbol类型的值不能转换为数字,会报错
- 对象(包括数组)会首先被转换为相应的基本数据类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。为了将值转换为相应的基本类型值,抽象操作
ToPrimitive
会首先(通过内部操作DefaultValue
)检查该值是否有valueOf()
方法。如果有并且返回基本类型值,就使用该值进行强制类型转换。如果没有就使用toString()
的返回值(如果存在)来进行强制类型转换。如果valueOf()
和toString()
均不返回基本类型值,会产生TypeError
错误。
- Undefined类型的值转换为
-
其他值转为字符串:
ToString
,负责处理非字符串到字符串的强制类型转换。- Null和Undefined类型,null转化为"null",undefined转换为"undefined"
- Boolean类型,转换为"true"、“false”
- Number类型的值直接转换,不过极小和极大的数字会使用指数形式
- Symbol类型的值直接转换,但是只允许显示强制类型转换,使用隐式强制类型转换会产生错误
- 对象,对于普通对象来说,除非自定义的
toString()
方法,否则会调用toString()(Object.prototype.toString())
来返回内部属性[[Class]]的值,如"[object Object]"。如果对象有自己的toString()
方法,字符串转换时就会调用该方法并使用其返回值
2,typeof
// 基本类型
typeof 1 // ‘number’
typeof NaN // ‘number’ 意指“不是一个数字”,NaN是一个“警戒值”,有特殊用途的常规值,用于指出数字类型中的错误情况,即“执行数学运算没有成功,这是失败后返回的结果”。它和自身不相等,是唯一一个非自反(自反,reflexive,即 x === x 不成立)。而NaN != NaN为true
typeof “1” // ‘string’
typeof undefined // ‘undefined’
typeof true // ‘boolean’
typeof Symbol() // ‘symbol’
// 对象类型,除函数外都显示object
typeof {} // ‘object’,{}valueOf结果为{},toString结果为"[object Object]"
typeof [] // ‘object’,[]valueOf结果为[],toString结果为""
typeof conlose.log // ‘function’
typeof null // ‘object’
// null类型是基本类型,但是会显示object,这是一个存在很久的bug
// 在最初的js版本中使用的是32位系统,000开头代表是对象,null表示为全零