最新的ECMAScript 标准定义了 7 种数据类型 :
- 6 种原始类型 String、Number、Boolean、Null、Undefined、Symbol;1 种复杂的Object类型
原始类型:
字符串类型(String):
声明方式
var a = new String("123") // 不推荐使用
// or
var a = "123"
区别:
var a = new String("123"), a1 = new String("123") // 类型为Object
a == a1 // false
//使用new关键字的创建的是字符串对象,是放到堆栈里面的
var a = "123", a1 = "123" // 类型为String
a == a1 // true
//直接赋值的操作是创建了一个常量,放到常量池里面的,
数字类型(Number)
声明方式和区别跟字符串一样;
NaN非数字: 任何涉及到NaN的运算都会返回NaN、NaN不等于NaN;
isNaN()是用来判断是否是非数字 eq:
isNaN(123) // false
isNaN("123") // false
isNaN("hello") // true
布尔类型(Boolean)
表示一个逻辑实体,只有true 和 false两个值
Undefined类型(Undefined)
只有一个值undefined ;使用 var 和 let 声明了变量但未初始化值的时候,这个变量的值就是undefined
Null类型(null)
空指针对象,特指对象的值未设置
符号类型(Symbol)
符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值
对象(Object)
对象是指内存中的可以被 标识符引用的一块区域; 就是引用类型
"标准的对象"
常用的就是Object实例化的对象
声明方式:
//使用new操作符和Object构造函数
var a = new Object; // 如果不传参数()可以省略
a.name = "张三"
//or对象字面量语法
var a = {
“name”: "张三"
}
数组(Array)
声明方式:
var a = new Array(4) // 创建占据4个位置的空数组
a.length // 4
var a = new Array() // 创建一个空的数组
a.length // 0
var a = [], a = [12, 23, 34]
函数(function)
函数是一个附带可被调用功能的常规对象。
日期(Date)
创建本地时间的对象
js判断数据类型的方法
typeof 方法
注意:这个方法返回的都是字符串
let und;
let sym = Symbol("this is Symbol");
let date = new Date();
function name(){
//code
}
typeof "123" // "string"
typeof 123 // "number"
typeof und // "undefined"
typeof undefined // "undefined"
typeof true // "boolean"
typeof sym // "symbol"
typeof Symbol() // "symbol"
typeof name // "function"
typeof null // "object"
typeof [] // "object"
typeof {} // "object"
typeof date // "object"
instanceof 方法
用来判断已知是object类型的方法
var func = function () {
// code....
}
var date = new Date();
[] instanceof Array // true
func instanceof Function // true
date instanceof Date // true
{} instanceof Object // true
[] instanceof Object // true 这就尴尬了。。。
对象上的toString方法 (适用与所有情况)
返回的是字符串
var getType = Object.prototype.toString
var func = function() { // code... }
var sym = Symbol("this is symbol")
var date = new Date()
getType.call("aaa") // "[object String]"
getType.call(123) // "[object Number]"
getType.call(undefined) // "[object Undefined]"
getType.call(true) // "[object Boolean]"
getType.call(sym) // "[object Symbol]"
getType.call(null) // "[object Null]"
getType.call(func) // "[object Function]"
getType.call([1, 2, 3]) // "[object Array]"
getType.call(date) // "[object Date]"
getType.call({}) // "[object Object]"
可以封装成方法
var getType = Object.prototype.toString;
var judgeType = {
isNull (e) {
return getType.call(e) == "[object Null]";
},
isArray (e) {
return getType.call(e) == "[object Array]";
},
isString (e) {
return getType.call(e) == "[object String]";
},
isNumber (e) {
return getType.call(e) == "[object Number]";
},
isSymbol (e) {
return getType.call(e) == "[object Symbol]";
},
//......
}