1、JavaScript有哪些数据类型,它们的区别?
1️⃣:基本数据类型:number、string、boolean、Undefined、NaN、Symbol
2️⃣:引用数据类型:Object、Array、function
基本数据类型:放在内存的栈中
引用类型数据:放在内存的堆中
3️⃣:区别
NaN是JS中的特殊值,表示非数字,他不等于任何值,包括自身,在布尔运算时被当作false,NaN与任何值运算的结果都是NaN
Symbol和BigInt是ES6中新增的数据类型:
– Symbol代表创建独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题
– BigInt可以安全地存储和操作大整数,即使这个数已经超过Number能狗表示地安全整数范围。
2、基本数据类型和引用数据类型地区别:
1️⃣:基本数据类型是按值访问的,操作保存在变量中的实际的值。
2️⃣:基本数据类型的值是不可变的,变量名只是指向变量的一个指针,变量重新赋值改变的是指针的指向,该变量是不变的。
3️⃣:基本数据类型不可以添加属性和方法,但是引用类型可以。
4️⃣:基本数据类型的赋值是简单赋值,如果从一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值。
变量对象:变量对象是JS中内部的数据结构,用于存储在执行上下文声明的变量和函数
5️⃣: 基本数据类型的比较是值的比较,引用类型的比较是引用的比较
引用类型的比较是比较引用地址,如果有两个对象即使key和value都相同,但是当用(===)全等符号比较时,返回的是false。
3、数据类型检测的方式有哪些:
1️⃣:typeOf
typeOf对数组、对象、null,function都会判断为object
JS将数组和对象视为对象,将null视为一个特殊的空对象指针。
数组是一种特殊的对象,其键名是以数字为下标的一组有序属性。
2️⃣:instance of
instanceof只能判断对象的类型,无法判断基本数据类型。
内部运行机制是判断其原型链中能否找到该类型的原型。
instanceof可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性
3️⃣:constructor
constructor有两个作用:
– 是判断数据的类型
– 是对象实例通过constructor对象访问它的构造函数
❗❗ :如果创建一个对象改变它的原型,constructor就不能用来判断数据类型
function Fn(){};
Fn.prototype = new Array();
var f = new Fn();
console.log(f.constructor===Fn); // false
console.log(f.constructor===Array); // true
4️⃣:Object.prototype.toString.call()
var a = Object.prototype.toString
console.log(a.call(2)) //Number
console.log(a.call(true)) //Boolean
obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样:
原因:toString是Object的原型方法,而Array、function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toStrin()方法时,调用的是对应的重写之后的toString方法,而不会去调用Object上原型toString方法。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net