类型
- 原始(值)类型
- Undefined
- Null
- Boolean
- String
- Number
- Object
- 对象(引用)类型
- Object
- Array
- Date
- ...
- Object
对象类型
- 浏览器扩展对象
ActiveObject、Debug、VBArry、XML、Script ...
由于各个浏览器之前这些对象并不通用,因此早起我们的开发者为了开发一个功能,需要针对不同的浏览器设计不同的页面,随着ECMA和w3c一系列规范的发展,这些浏览器扩展对象正在慢慢消失或者弃用。稍作了解
- 宿主对象
window、document、navigator...
提供了DOM和BOM操作的API,需要深入了解
- 原声对象
- 构造函数(通过构造函数创建的对象)
- Boolean
- String
- Number
- Object
- Function
- Array
- Date
- RegExp
- Error
- 对象
- Math
- JSON
- 全局对象
- arguments
类型转换
- 隐式类型转换
- 数字和字符串作'+'操作时,数字隐式地转化成字符串
2+'1' //'21'
- 其他运算符字符串会隐式地转化成字数字
2-'1' //1
- 数字、字符串进行'.'操作时会转成对象类型
(3.1415).toFixed(2) // 3.14
- 隐式类型转化出现的场景
- 数字运算符
- . 操作符
- if语句
- == 双等号
- 隐式类型转化结果
- undefined转化成Number时结果为NaN
- null转化成Number时结果为0
- ""转化成Boolean时结果为false
- 带有非数字字符的字符串转成Number是结果都为NaN
- NaN转成Boolean时结果为false
- 所有对象转成boolean结果都是true
- 所有对象转成Number结果都是NaN
- 数字和字符串作'+'操作时,数字隐式地转化成字符串
- 显式类型转换
- NuMber(x) 把x转成数字
- String(x) 把X转成字符串
- Boolean(x) 把x转成布尔值
- paseInt()、paseFloat()
- !、!! 转成布尔值
类型识别
- typeof
- 是一个操作符,typeof "a" typeof("a")
- 可以识别标准类型(Null除外)
- 不能识别具体的对象类型,但可以识别Function
- instanceof
- 能识别所有对象留下
- 不能判别原始类型
[] instanceof Array //true
/s/ instanceof RegExp //true
- Object.prototype.toString.call
- 可识别标准类型以及内置对象类型
- 不能识别自定义对象类型
function type(obj){
return Object.prototype.toString.call(obj).slice(8,-1)
}
- constructor
- 识别标准类型(undefind和nunll除外)
- 识别内置对象类型
- 识别自定义对象类型
- 识别所有类型函数封装
function getConstructorName(obj){
return (obj===undefined||obj===null)?obj:(obj.constructor&&obj.constructor.toString().match(/function\s*([^(]*)/)[1]);
}
网友评论