javascript有几种数据类型(JavaScript的六大数据类型3)

javascript有几种数据类型(JavaScript的六大数据类型3)(1)


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

示例如下:

javascript有几种数据类型(JavaScript的六大数据类型3)(2)

void操作符和Undefined操作符

可以用void操作符来代替undefined

证明:

var x ; if(x === void(0)){ document.write(1); }else{ document.write(2); }

结果:

javascript有几种数据类型(JavaScript的六大数据类型3)(3)


symbol数据类型:

Symbol 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用,表示独一无二的值。Symbol 对象是一个 symbol primitive data type 的隐式对象包装器。

用法:

因为Symbol函数返回的值都是独一无二的,所以每一个Symbol值都是不相等的,那么常用作为属性标识符。

注意:

定义属性的时候只能将Symbol值放在方括号里面,否则属性的键名会当做字符串而不是Symbol值。同理,在访问Symbol属性的时候也不能通过点运算符去访问,点运算符后面总是字符串,不会读取Symbol值作为标识符所指代的值.

属性名的遍历

Symbol作为属性名,虽然不是私有属性,但是在for…in,for…of循环中,Object.keys() ,Object.getOwnPropertyNames()都不会获取到。通常通过两种方法达到Symbol属性的遍历,但是以Symbol值作为名称的属性不会被常规方法遍历所得到。

  1. Object.getOwnPropertySymbols方法返回一个数组,成员是当前对象的所有Symbol值的属性。
  2. Reflect.ownKeys()可以返回所有类型的键名,包括包括常规的键名和Symbol键名.

隐式转换

1、巧用 和-规则转换类型

把变量转换成数字:num-0;

把变量转换成字符串:num '';

2、a==b

javascript有几种数据类型(JavaScript的六大数据类型3)(4)

类型相同,同===

类型不同,尝试类型转换和比较:

javascript有几种数据类型(JavaScript的六大数据类型3)(5)

3、a===b

类型不同,返回false

类型相同:

javascript有几种数据类型(JavaScript的六大数据类型3)(6)

包装对象

基本类型中的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。

javascript有几种数据类型(JavaScript的六大数据类型3)(7)

其中,str,number和true都有包装类型,所以可以把数字用括号括起来调用toString()方法。

检测类型:

1.type of :

typeof null //返回“object”。

javascript有几种数据类型(JavaScript的六大数据类型3)(8)

2.instanceof

基于原型链操作,obj instanceof Object。左操作数为对象,不是就返回false,右操作数必须是函数对象或者函数构造器,不是就返回typeError异常。

原理:判断左边的左操作数对象原型链上是否有右边这个构造函数的prototype属性

任何一个构造函数都有一个prototype对象属性,这个对象属性将用作new出来的对象的原型。

bosn instanceof Person的时候发现bosn的原型也就是Student.prototype不等于Person.prototype,所以原型链还会向上查找,bosn的原型的原型等于Person.prototype所以返回true。

javascript有几种数据类型(JavaScript的六大数据类型3)(9)

instance of在判断对象是不是数组,Data,正则等时很好用。

instance of:不同window或iframe之间的对象类型检测不能使用instanceof!

检测总结:

javascript有几种数据类型(JavaScript的六大数据类型3)(10)

本文内容部分来自网络,如有侵权,请联系修改。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页