OO-1.原始类型和引用类型

一、原始类型

  1. typeof 鉴别原始类型

    原始类型:

    boolean;number;string;null;undefined;

  2. 判断一个为空类型的最佳方法是直接和null比较

  3. 当使用双等号进行比较时,双等号操作符会在比较之前把字符串转换成数字,因此认为“5”与5相等,三等号认为这两个值得类型不同,因此不想等,同样在比较undefined和null时双等号认为相等,三等号认为不想等,所以当试图鉴别null时只有三等好才能鉴别

  4. 原始类型拥有方法,但原始类型不是对象。

    原始类型的一些方法:

二、引用类型

javascript有好几种方法可以创建对象,第一种是new操作符和构造函数。构造函数是通过new操作符来创建对象的函数,任何函数都可以是构造函数。

var object=new Object;

var items=new Array;

var error=new Error("something happend");

var func=new Function("console.log('hi')");

var object=new Object;

var re=new RegExp("\\d+");


  1. 对象引用解除

    var object=new Object1;

    do something

    object1=null;

2.所有非函数的引用类型用instanceof 鉴别

var items={};

console.log(items instanceof Array);

es5引入了Array.isArray(items);来鉴别数组;

var name="nic";
var firstChar=name.charAt(0);
console.log(firstChar);

这是在背后发生的事情

var name="nic";
var temp=new String(name);
var firstChar=temp.charAt(0);
temp=null;
console.log(firstChar);


var name="nic";
name.last="zakas";
console.log(name.last)   //undefined

背后发生的事

var name="nic";
var temp=new String(name);
temp.last="zakas";
temp=null;

实际上是一个立即被销毁的临时对象而不是在字符串上添加了新属性;

var name="nic";
var count=10;
var found="false";
console.log(name instanseof String);    //false
console.log(count instanseof Number);   //false
console.log(found instanseof Boolean);  //false

这是因为临时对象仅在值被读取时创建,instanceof并没有真的读取任何东西。

另外,使用String Number Boolean对象和使用原始值有一定区别。

一个对象在条件判断语句种总被认为是true,无论该对象的值是不是等于false;

var found=new Boolean(false);
if(found){
    console.log("Found")            //Found
}

手工创建的原始封装类型在其他地方也很容易让人误解,在大多数情况下只会导致错误,因此除非有特殊情况,应该尽力避免这么做