js中常用的数据类型
JavaScript 变量能够保存多种数据类型,而JavaScript中的数据类型分为基本数据类型和引用数据累心,常用的基本数据类型包括数字(Number)、字符串(String)、布尔值(Boolean)、Null、Undefine、Symbol等,常用的引用数据类型包括Object(对象)、Array(数组)、Function(函数)。
基本类型和引用类型存储于内存的位置不同,基本类型直接存储在栈中,而引用类型的对象存储在堆中,与此同时,在栈中存储了指针,而这个指针指向正是堆中实体的起始位置,区别如下:
let a = 10;
let b = a;
b = 20;
console.log(a) //10
console.log(b) //20
上述代码中,a、b都是基本数据类型,两者分别修改赋值,相互之间没有任何影响。在看医用类型的例子:
let x = {a:10,b:20}
let y = x
y.a = 100
y.b = 200
console.log(x) //{a:100,b:200}
console.log(y) //{a:100,b:200}
上述代码中,x、y都是引用类型。在执行了x = y之后,修改y的属性值,x的也跟着变化。因为x和y都是引用类型,指向了同一个内存地址,即两者引用的是同一个值,因此y修改属性时,x的值随之改动。
数据类型检测
- typeof
typeof返回一个表示数据类型的字符串,返回结果包括:number、boolean、string、symbol、object、undefined、function等7种数据类型,但不能判断null、array等。
typeof Symbol(); // symbol 有效
typeof ''; // string 有效
typeof 1; // number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new Function(); // function 有效
typeof null; //object 无效
typeof []; //object 无效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效
- instanceof
是用来判断A是否为B的实例,表达式为:A instanceof B,如果A是B的实例,则返回true,否则返回false。instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,但它不能检测null 和 undefined
[] instanceof Array; //true
{} instanceof Object; //true
new Date() instanceof Date; //true
new RegExp() instanceof RegExp //true
null instanceof Null //报错
undefined instanceof undefined //报错
- Object.prototype.toString.call()
Object.prototype.toString.call() 是最准确最常用的方式。
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefine) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error) ; // [object Error]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。