javaScript数据类型及其检测

前言:javaScript数据类型分为基本数据类型和引用数据类型

基本数据类型:Number,String,Boolean,Null,Undefined,symbol(ES6)
引用数据类型主要是function,Array等

基本数据类型
  1. 值不可变
    在对基本数据类型的操作后,基本数据类型的值仍然没有改变。这里涉及到了一个叫做包装类的问题,前面文章里有
  2. 存放在栈区
  3. 值的比较
var a =1;
var b= true;
console.log(a==b)//true
console.log(a===b)//false

这里是因为两个等号只是进行数据的比较,三个等号需要进行数据类型的比较
上面的东西都很基础,不详细说

引用数据类型
  1. 值可变
  2. 同时存储在栈区和堆区,地址存放在栈区,也就是指针,内容存放在堆区
  3. 比较是引用的比较
		var My = {
            age:1
        }
		var you = My;
        console.log(you.age);//1共用一段堆内存,栈地址不同*/
        you.age = 10;
        console.log(My.age); //10

you进行复制时在栈区创建了一个新的地址,但是仍然指向a的堆区,共用同一段堆内存,这时如果改变其中一个对象都会互相影响。但是,取消某一变量对于原对象的引用不会影响到另一个变量

var a = {age:20};
var b = a;
a = 1;
b//{age:20}

原来a和b指向同一个引用,然后使a的值变为1,也就是取消了对原对象的引用,这时不会对b产生影响

重点:

检测数据类型

1.typeof
typeof返回一个表示数据类型的字符串,包括number,string,boolean,object,undefined,symbol,function等

var a = 10;
console.log(typeof(a));//number

这里对于null与array有一定的问题

typeof null //object
typeof [] //object
typeof {} //object

数组和对象返回的都是object,因此无法区分,这时就需要用到instanceof
4. instanceof
instanceof运算符返回一个布尔值,表示对象是否为某个构造函数的实例,instanceof运算符的左边是实例对象,右边是构造函数。它会检查右边构建函数的原型对象(prototype),是否在左边对象的原型链上.

var d = new Date();
d instanceof Date // true
d instanceof Object // true

因为instanceof检测的是整个原型链,因此可能会返回多个true
instanceof的原理是检查右边构造函数的prototype属性,是否在左边对象的原型链上。有一种特殊情况,就是左边对象的原型链上,只有null对象。这时,instanceof判断会失真

var a = function(){
			return 123;
		}
		a.prototype = null;
		console.log(a instanceof Object);
		console.log(typeof(a));

失真
但是,只要一个对象的原型不是null,一般的判断是没有问题的
但是instanceof无法判断原始值类型,

var s = 'hello';
s instanceof String // false

上面代码中,字符串不是String对象的实例(因为字符串不是对象),所以返回false。

此外,** 对于undefined和null,instanceOf运算符总是返回false **
还有constructor与Object.prototype.toString.call(),后续补充,另外,附上一张原型链图
原型链

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值