javascript有几种数据类型(JavaScript的六大数据类型3)
js数据类型主要有一下几个部分:
值类型(基本类型):
1.字符串类型(string)
2.数值类型(number)
3.布尔类型(boolean)
4.对空类型(Null)
5.未定义类型(Undefined)
6.Symbol类型:ES6 引入了一种新的原始数据类型,表示独一无二的值。
引用数据类型:
1.对象类型(Object)
2.数组类型(Array)
3.函数类型(Function)
未定义类型:(Undefined)
Undefined时全局变量的一个属性,它只有一个值即:undefined。当使用var声明变量但未对其初始化时,这个变量的值就是undefined。
var test;
//document.write(test); //undefined
alert(test);
undefined通常出现的场景:
1、已经声明但未赋值的变量
2、typeof检测未声明的变量的数据类型
3、没有返回值的函数的执行结果
4、函数没有传入参数
5、void(expression)
var Age; document.write(Age "<Br>"); //<undefined></undefined> //2、 var Gender document.write(typeof (Gender) "<Br>"); //undefined //3、 function f(){} document.write(f() "<Br>"); //undefined //4、 function f(x){ return x; } document.write(f() "<Br>"); //undefined //5、 document.write(void(0) "<Br>"); //undefined
示例如下:
void操作符和Undefined操作符
可以用void操作符来代替undefined
证明:
var x ; if(x === void(0)){ document.write(1); }else{ document.write(2); }
结果:
symbol数据类型:Symbol 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用,表示独一无二的值。Symbol 对象是一个 symbol primitive data type 的隐式对象包装器。
用法:
因为Symbol函数返回的值都是独一无二的,所以每一个Symbol值都是不相等的,那么常用作为属性标识符。
注意:
定义属性的时候只能将Symbol值放在方括号里面,否则属性的键名会当做字符串而不是Symbol值。同理,在访问Symbol属性的时候也不能通过点运算符去访问,点运算符后面总是字符串,不会读取Symbol值作为标识符所指代的值.
属性名的遍历
Symbol作为属性名,虽然不是私有属性,但是在for…in,for…of循环中,Object.keys() ,Object.getOwnPropertyNames()都不会获取到。通常通过两种方法达到Symbol属性的遍历,但是以Symbol值作为名称的属性不会被常规方法遍历所得到。
- Object.getOwnPropertySymbols方法返回一个数组,成员是当前对象的所有Symbol值的属性。
- Reflect.ownKeys()可以返回所有类型的键名,包括包括常规的键名和Symbol键名.
隐式转换1、巧用 和-规则转换类型
把变量转换成数字:num-0;
把变量转换成字符串:num '';
2、a==b
类型相同,同===
类型不同,尝试类型转换和比较:
3、a===b
类型不同,返回false
类型相同:
包装对象
基本类型中的number,string和boolean都有对应的包装类型。
//var str = "string"; //返回 undefined //strObj: String{0:"s",1:"t",2:"r",3:"i",4:"n",5:"g",length:6,[[PrimitiveValue]]:"string"}; //str :string str即对“string”的包装 //var strObj = new string("string"); //返回 undefined,是对strObj对象的包装。 var a = "string"; //a.length :包装过后的调用。 alert(a.length); //返回值 :6 a.t=3; alert(a.t); //返回值:undefined
把一个基本类型尝试用对象的方式使用它的时候,比如访问length属性,或者增加一些属性的操作时,javascript会把这些基本类型转化为对应的包装类型对象。完成这样一个访问比如a.length返回以后或者a.t设置了以后,这个临时对象会被销毁掉。所以a.t赋值3了以后,再去输出a.t值是undefined。
其中,str,number和true都有包装类型,所以可以把数字用括号括起来调用toString()方法。
检测类型:1.type of :
typeof null //返回“object”。
2.instanceof
基于原型链操作,obj instanceof Object。左操作数为对象,不是就返回false,右操作数必须是函数对象或者函数构造器,不是就返回typeError异常。
原理:判断左边的左操作数的对象的原型链上是否有右边这个构造函数的prototype属性。
任何一个构造函数都有一个prototype对象属性,这个对象属性将用作new出来的对象的原型。
bosn instanceof Person的时候发现bosn的原型也就是Student.prototype不等于Person.prototype,所以原型链还会向上查找,bosn的原型的原型等于Person.prototype所以返回true。
instance of在判断对象是不是数组,Data,正则等时很好用。
instance of:不同window或iframe之间的对象类型检测不能使用instanceof!
检测总结:
本文内容部分来自网络,如有侵权,请联系修改。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com