javascript基本类型详解

前端之家收集整理的这篇文章主要介绍了javascript基本类型详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_403_0@js中一共5个原始值,6个typeof能判断的,9个原生的内置的构造函数


@H_4030@  这569,构成了js语言的基础。


@H
4030@   5个原始值是:数字,字符,布尔,null,undefined


@H
403_0@   typeof能判断:数字,字符,布尔,object,function,undefined。 注意null和数组,tyopeof都输出object。


@H_4030@ typeof不能区分出数组和对象,如何判断类型呢?使用Object.prototype.toString.apply()。


@H
4030@ if(value&&typeof value ==='object'&&value.constructor === Array)


@H
4030@ 上面的检测如果在不同帧和窗口创建的数组,会给出false,window对象不一样了.


@H
403_0@ 可靠的方法是if(Object.prototype.toString.apply(value)==="[object Array]")


@H_403_0@ arguments 数组不是一个数组,他只是一个有着length成员属性的对象。
   如下面例子所示 arguments不是普通的array


@H_403_0@<div class="codetitle"><a style="CURSOR: pointer" data="59130" class="copybut" id="copybut59130" onclick="doCopy('code59130')"> 代码如下:
<div class="codebody" id="code59130">
var a = function (){
var b = Object.prototype.toString.apply(arguments);
console.log(b);


@H_403_0@}
a();//输出[object Arguments]

@H_403_0@
代码如下:
@H_403_0@} a();//输出[object Array]

@H_403_0@

instanceof是如何判断是否实例

@H_403_0@prototype里面的属性有constructor.

@H_403_0@默认的prototype属性是一个object对象,可以设置为任何复杂值,忽略设置为原始值.

@H_403_0@虽然他尽是一个对象,但他是特殊性的,圆形链将每个实例都链接至其构造函数的prototype属性。实例与构造函数的 prototype属性之间有一个隐蔽的链接,这就是实例的__proto__。同时实例的constructor属性是通过构造函数prototype的constructor拿到的。

@H_403_0@但是要保留constructor,这样可以让new的实例有constructor的属性,也可以使用instanceof来判断。

@H_403_0@
代码如下:
@H_403_0@Foo.prototype={constructor:Foo}

@H_403_0@var FooInstance = new Foo;

@H_403_0@FooInstance.__proto__=== Foo.prototype;//true

@H_403_0@FooInstance.constructor === Foo; //true

@H_403_0@实际上instanceof判断不是依据constructor,而是依据原型链判断,如下面例子

@H_403_0@
代码如下:

@H_403_0@使用原始值,不使用构造函数

@H_403_0@哪些值算是false:false,"",null,-0,NaN,undefined,这些算是false其他都是true

@H_403_0@但是请注意下面这个例子

@H_403_0@
代码如下:
输出 if (b ){console.log(b);}//Boolean {[[PrimitiveValue]]: false} new 一个相当于一个对象了,就不是false

@H_403_0@上面的文章理论性稍强了一些,不过这些都是构成javascript语言的基础,一定要了解清楚才行。

猜你在找的JavaScript相关文章