日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js的数据类型,以及如何判断它们是哪种类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、js的數(shù)據(jù)類型:null 、 nudefined 、number、Boolean、string、array、object

二、判斷js的數(shù)據(jù)類型

(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 ==> 結(jié)果是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數(shù)據(jù)的判斷結(jié)果共有6種:

undefined, number, string, boolean, function, object

1、分類:

簡單的值類型(不是對象):null、undefined、boolean、number、string。

復(fù)雜的引用類型(是對象):函數(shù)、數(shù)組、對象、new Number(10)、new String('10')、new Boolean(true)、正則、日期等等。

2、為什么說null不是對象呢?typeof null 的值不是object嗎?

a. 它老祖宗都不認(rèn)他。

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

b.對象的定義是:若干屬性的集合,而null不符合對象的定義,不是引用類型。

var nullType = null;

nullType.a = 123; // 報(bào)錯(cuò) ==> Unexpected token .

綜上:null不是一個(gè)對象,不是復(fù)雜的引用類型。null最初是用來表示空對象的,但是不屬于對象。typeof對null的判斷是js的一個(gè)bug。

三、如何判斷一個(gè)變量的數(shù)據(jù)類型

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

// 值類型

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

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

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

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

//雖然function也是一個(gè)引用類型對象,但是可以通過typeof判斷:

var fn = function() {};

console.log(typeof fn); // function

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

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

不能用 == ,因?yàn)?#xff1a;

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()的實(shí)現(xiàn)原理

ECMAScript3

toString方法被調(diào)用的時(shí)候,會(huì)執(zhí)行下面的操作步驟

1、獲取this對象的[[Class]]屬性值。

2、計(jì)算出三個(gè)字符串“[object”,第一步的操作結(jié)果Result(1),以及"]"連接后的新字符串。

3、返回第二步的操作結(jié)果Result(2)

[[Class]]一個(gè)字符串值,表明了該對象的類型

然后給了一段解釋:

所有內(nèi)置對象[[Class]]屬性的值是由本規(guī)范定義的,所有宿主對象的[[Class]]屬性的值可以是任意值,甚至可以是內(nèi)置對象使用過的[[Class]]屬性的值.[[Class]]屬性的值可以用來判斷一個(gè)原生對象屬于哪種內(nèi)置類型。需要注意的是,除了通過Object.prototype.toString方法之外,本規(guī)范沒有提供任何其他方式來讓程序訪問該屬性的值。

ECMAScript5

在toString方法被調(diào)用時(shí),會(huì)執(zhí)行下面的操作步驟

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

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

3、讓O成為調(diào)用ToObject(this)的結(jié)果

4、讓class成為O的內(nèi)置屬性[[Class]]的值

5、返回三個(gè)字符串"[object",class,以及"]"連接后的新字符串

ES5中,[[Class]]屬性的解釋更加詳細(xì)

所有內(nèi)置對象的[[Class]]屬性的值是有本規(guī)范定義的,所有宿主對象的[[Class]]屬性的值可以是除了"Arguments"、"Array"、"Boolean"、"Date"、"Error"、"Function"、"JSON"、"Math"、"Number'、"Object"、"regExp"、"String"之外的任何字符串。[[Class]]內(nèi)部屬性是引擎內(nèi)部用來判斷一個(gè)對象屬于哪種類型的值的,需要注意的是,除了通過Object.prototype.toString方法以外,本規(guī)范沒有提供任何其他方式來讓程序訪問該屬性的值。

總而言之,要獲取一個(gè)對象的真實(shí)的內(nèi)置類型,我們需要通過獲取[[Class]]的屬性值,在es5之前,該屬性值只能通過Object.prototype.toString來訪問,因此,通過Object.prototype.toString.call(arr),改變toString方法的this指向,從而獲得對象的內(nèi)置類型。

總結(jié)

以上是生活随笔為你收集整理的js的数据类型,以及如何判断它们是哪种类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。