日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

js的数据类型,以及如何判断它们是哪种类型

發布時間:2025/3/18 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js的数据类型,以及如何判断它们是哪种类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、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 ({ a: 10, b: 20 }));? //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的数据类型,以及如何判断它们是哪种类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。