详解JavaScript中的数据类型,以及检测数据类型的方法
一.js中的数据类型有哪些?
在js中,基本数据类型有五种,分别是string、number、boolean、null、undefined,不过在ES6中新增加的了一种基本数据类型Symbol(表示独一无二的值),其作用主要是从根本上防止属性名的冲突而设定的。
除了基本数据类型之外,还有引用数据类型object,也有人称之为复杂数据类型,包含了我们常见的Array、Object、Function等。
所以现在js中的数据类型共有七种。
PS:Symbol数据类型通过Symbol函数生成。也就是说,对象的属性名现在可以有原来的字符串以及现在的Symbol类型俩种了,凡是属性名属于Symbol类型,就是独一无二的,可以保证不会与其他属性名冲突。
Symbol函数还可以接收一个字符串参数,表示对Symbol实例的描述。
lets=Symbol() console.log(typeofs)//"symbol" lets1=Symbol('s1') lets2=Symbol('s2') console.log(s1)//Symbol(s1) console.log(s2)//Symbol(s2)
注意:Symbol函数的参数只是表示对当前实例的描述,因此相同参数的Symbol的返回值是不相等的。
二.js数据类型检测的方法(一般有一下几种):
1.typeof:typeof一般用于检测基本数据类型,因为它检测引用数据类型都返回Objcet
console.log(typeof1)//"number" console.log(typeof'a')//"string" console.log(typeofundefined)//"undefined" console.log(typeoftrue)//"boolean" console.log(typeofnull)//"object" console.log(typeof)//"symbol" functionfun(){} console.log(typeoffun)//"function"
注意:typeof检测null也会返回Object,这是js一直以来遗留的BUG。用typeof检测function返回的是'function'。
2.instanceof这个方法主要是用来准备的检测引用数据类型的(不能用来检测基本数据类型),用来检测构造函数的prototype属性是否出现在对象原型链中的任意位置。
letfun=function(){} funinstanceofFunction//true letobj={} objinstanceofObject//true letarr=[] arrinstanceofArray//true
曾今被面试官问过一道题1instanceof返回的是什么?当时给因为自身原因说了返回true,现在想想Emmm…
1instanceofNumber//false nullinstanceofObject//false
instanceof运算符直接访问的变量的原始值,不会自动建立包装类。因此不能用来判断基本数据类型。
3.Object.prototype.toString()可以用来准备的检测所有数据类型。
Object.prototype.toString.call([]) //"objectArray" Object.prototype.toString.call(1) //"objectNumber" Object.prototype.toString.call(null) //"objectNull" Object.prototype.toString.call(undefined) //"objectUndefined" Object.prototype.toString.call({}) //"objectObject" Object.prototype.toString.call(functionadd(){}) //"objectFunction" ....
4.constructor通过检测类型在原型链中的constructor指向来返回布尔值。
letarr=[] arr.constructor==Array //true letfun=function(){} fun.constructor==Function //true
注意:null和undefined是没有constructor属性的,可以用其他方法判断。
通过几这次的总结,对于js的数据类型,以及如何检测数据类型有了深刻的认识,下次面试不慌张~
以上就是详解JavaScript中的数据类型,以及检测数据类型的方法的详细内容,更多关于JavaScript数据类型的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。