1.数据类型
ES6中有6种简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、String、Symbol
。Symbol(无符号)是ES6新增类型,可用于属性名定义。还有一种复杂数据类型叫Object
(对象)也称为引用类型,它是JS语言中所有对象的基类。Object是一种无序名值对的集合。因为ES6中不能定义自己的数据类型,所有值都可以用这7种数据类型之一表示。但ES6的数据类型很灵活,一种数据类型可以当做多种数据类型来使用。
内置引用类型包含:
- 基本引用类型:
Date、RegExp、Function、原始值包装类型(Boolean、Number、String)、单体内置对象(Global、Math)
- 集合应用类型:
Object、Array、定型数组(ArrayBuffer、DataView)、Map、WeakMap、Set、WeakSet
JS数据类型.png
2.数据类型判断
typeof
typeof
操作符可以确定任意变量的数据类型。一个变量使用typeof
操作符会返回下列字符串之一:
-
undefined
表示值未定义 -
boolean
表示值为布尔值 -
string
表示值为字符串 -
number
表示值为数值 -
symbol
表示值为符号 -
object
表示值为对象(不是函数)或者null -
function
表示值为函数
let message = "some string";
console.log(typeof message); // "string"
console.log(typeof(message)); // "string"
console.log(typeof 95); // "number"
注意:调用typeof null
返回的是object
。这是因为特殊值null被认为是一个对空对象的引用。
instanceof
typeof虽然对原始值很有用,但它对引用值的用处不大。我们通常不关心一个值是不是对象,而是想知道它是什么类型的对象。为了解决这个问题,ECMAScript提供了instanceof操作符,语法如下:
result = variable instanceof constructor
一般认为instanceof操作符是确定对象类型更可靠的方式。
如果变量是给定引用类型(由其原型链决定)的实例,则instanceof操作符返回true。
按照定义,所有引用值都是Object的实例,因此通过instanceof操作符检测任何引用值和Object构造函数都会返回true。类似地,如果用instanceof检测原始值,则始终会返回false,因为原始值不是对象。
let person = new Object();
console.log(person instanceof Object); //true
let colors = ['red','blue','green']
console.log(colors instanceof Array); //true
const pattern = new RegExp(/cat/g);
console.log(pattern instanceof RegExp); //true
网友评论