js的資料型別,以及如何判斷它們是哪種型別

2021-09-20 01:12:13 字數 3470 閱讀 3408

一、js的資料型別:null 、 nudefined 、number、boolean、string、array、object

二、判斷js的資料型別

(1)值型別

console.log(typeof(x));    // undefined

console.log(typeof(10));   // number

console.log(typeof('abc')); // string

console.log(typeof(true));  // boolean

console.log(typeof (null));  //object ==> 結果是object,但是屬於值型別

(2)引用型別

console.log(typeof(function () ));  //function

console.log(typeof([1, 'a', true]));  //object

console.log(typeof ());  //object

console.log(typeof (new number(10)));  //object

typeof對js資料的判斷結果共有6種:

undefined, number, string, boolean, function, object

1、分類:

簡單的值型別(不是物件):null、undefined、boolean、number、string。

複雜的引用型別(是物件):函式、陣列、物件、new number(10)、new string('10')、new boolean(true)、正則、日期等等。

2、為什麼說null不是物件呢?typeof null 的值不是object嗎?

a. 它老祖宗都不認他。

console.log(null instanceof object); // false

b.物件的定義是:若干屬性的集合,而null不符合物件的定義,不是引用型別。

var nulltype = null;

nulltype.a = 123; // 報錯 ==> unexpected token .

綜上:null不是乙個物件,不是複雜的引用型別。null最初是用來表示空物件的,但是不屬於物件。typeof對null的判斷是js的乙個bug。

三、如何判斷乙個變數的資料型別

1、值型別的型別判斷用typeof

// 值型別

console.log(typeof(x));    // undefined

console.log(typeof(10));   // number

console.log(typeof('abc')); // string

console.log(typeof(true));  // boolean

//雖然function也是乙個引用型別物件,但是可以通過typeof判斷:

var fn = function() {};

console.log(typeof fn); // function

如何判斷null型別?用 ===:

console.log(null === null); // true

不能用 == ,因為:

console.log(null == undefined); // true

console.log(null === undefined); // false

2、引用型別的型別判斷用instanceof

//引用型別

console.log(new string('string') instanceof string); // true

console.log(new number(10) instanceof number); // true

console.log(new boolean(true) instanceof boolean); // true

console.log(new array(3,4,5) instanceof array); // true

console.log( instanceof array); // true

var fn = function() {}

console.log(fn instanceof function); // true

3、object.prototype.tostring.call( ) 方法

object。prototype.tostring.call()的實現原理

ecmascript3

tostring方法被呼叫的時候,會執行下面的操作步驟

1、獲取this物件的[[class]]屬性值。

2、計算出三個字串「[object」,第一步的操作結果result(1),以及"]"連線後的新字串。

3、返回第二步的操作結果result(2)

[[class]]乙個字串值,表明了該物件的型別

然後給了一段解釋:

所有內建物件[[class]]屬性的值是由本規範定義的,所有宿主物件的[[class]]屬性的值可以是任意值,甚至可以是內建物件使用過的[[class]]屬性的值.[[class]]屬性的值可以用來判斷乙個原生物件屬於哪種內建型別。需要注意的是,除了通過object.prototype.tostring方法之外,本規範沒有提供任何其他方式來讓程式訪問該屬性的值。

ecmascript5

在tostring方法被呼叫時,會執行下面的操作步驟

1、如果this的值為undefiend,則返回'[object,undefiend]'

2、如果this的值為null,則返回'[object,null]'

3、讓o成為呼叫toobject(this)的結果

4、讓class成為o的內建屬性[[class]]的值

5、返回三個字串"[object",class,以及"]"連線後的新字串

es5中,[[class]]屬性的解釋更加詳細

所有內建物件的[[class]]屬性的值是有本規範定義的,所有宿主物件的[[class]]屬性的值可以是除了"arguments"、"array"、"boolean"、"date"、"error"、"function"、"json"、"math"、"number'、"object"、"regexp"、"string"之外的任何字串。[[class]]內部屬性是引擎內部用來判斷乙個物件屬於哪種型別的值的,需要注意的是,除了通過object.prototype.tostring方法以外,本規範沒有提供任何其他方式來讓程式訪問該屬性的值。

總而言之,要獲取乙個物件的真實的內建型別,我們需要通過獲取[[class]]的屬性值,在es5之前,該屬性值只能通過object.prototype.tostring來訪問,因此,通過object.prototype.tostring.call(arr),改變tostring方法的this指向,從而獲得物件的內建型別。

JS如何判斷資料型別

首先我們要清楚基本型別與引用型別分別是指什麼。基本型別 undefined null string number boolean symbol es6 引用型別 object array regexp date function 1.typeof typeof的返回值一共有七種,分別為 string...

資料型別的種類以及如何判斷資料型別

資料型別可以分為兩大類 第一大類 基本資料型別 第二大類 引用 物件 資料型別 基本資料型別又細分為這5類 string 任意的字串 number 任意數字 boolean true,false undefined undefined null null 引用資料型別又分為這三類 object 任意...

如何判斷js中的資料型別

如何判斷js中的資料型別 typeof instanceof constructor prototype方法比較 如何判斷js中的型別呢,先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new date var e function var f ...