javascript-----数据类型及检测(积累)

(一)javascript的数据类型
1.基本数据类型:Undefined,Null,Boolean,Number,String,Symbol
2.引用数据类型:Object(通常包含数组,对象,函数)
(二)基本数据类型的特点
1.值不可变

var name = 'tiger'
name.toUpperCase() //"TIGER"
name    // "tiger"

2.存放在栈区
3.值的比较

var a = 1
var b = true
a == b    // true
a===b     // false

(三)引用数据类型的特点
1.值可变

var obj={name:'tiger'}
obj.name = 'cat'
obj.name   // "cat"

引用类型拥有属性和方法,并且是可以动态改变的

2.同时保存在栈内存中和堆内存中
当解释器在寻找引用的值的时候,会检索栈中的地址,取得地址后再从堆中访问实体
3.比较是引用的比较

var obj_a={name:'tiger'}
var obj_b = obj_a
obj_b.name === obj_a.name    // true

在这里插入图片描述
(四)检测数据类型的方法:typeof,instanceof,constructor,Object.prototype.toString
1.typeof:能够准确的判断除开Null的其它基本数据类型,但是对于引用数据类型都会返回object
2.instanceof:
(1)对于基本数据类型,不能进行准确判断
(2)在类的原型继承中,结果也不一定准确。
(3)如果用于判断Null和Undefined,会直接报错,因为浏览器将这两个类保护起来的。

var age = null
age instanceof Null
VM1839:1 Uncaught ReferenceError: Null is not defined

3.constructor:
(1)null和undefined是无效对象,因为没有constructor
(2)函数的constructor是不稳定的,因为在类的原型进行重写的时候,很有可能将之前的constructor进行覆盖。
4.Object.prototype.toString:是最准确的常用方式
toString:本意是转为字符串的操作,但是不仅仅可以转换为字符串,对于Object上的toString()会返回当前方法执行的主体所属类的详细信息。

"[object Object]"  
//第一个表示当前实体的对象数据类型,固定返回
//第二个表示:this所属类的object

Object.prototype.toString.call('')  			//"[object String]"
Object.prototype.toString.call(1)   			 //"[object Number]"
Object.prototype.toString.call(true)   			 // "[object Boolean]"
Object.prototype.toString.call(undefined)   	// "[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(new RegExp) 		//"[object RegExp]"
Object.prototype.toString.call([])				//"[object Array]"
Object.prototype.toString.call(new Error) 		//"[object Error]"
Object.prototype.toString.call(document)		//"[object HTMLDocument]"
Object.prototype.toString.call(window)         	//"[object Window]"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值