導航:首頁 > 編程語言 > javascript判斷變數是否為對象

javascript判斷變數是否為對象

發布時間:2023-04-16 00:44:58

1. javascript如何判斷是不是一個對象

比如有一個變數a,

js">vara=xxxxxxxx;
if(typeofa=="number"){
//a是數
}elseif(typeofa=="string"){
//a是字元串
}elseif(typeofa=="undefined"){
//a是未定義
}elseif(typeofa=="boolean"){
//a是bool變數
}elseif(typeofa=="object"){
//a是對象
}

或者使用instance of:

varb=newDate();
if(binstanceofDate){
//b是Date類型的
}
varc=[];
if(cinstanceofArray){
//c是數組
}

2. 中如何判斷變數是數組,函數還是對象類型

JavaScript中檢測對象的方法
1.typeof操作符
這種方法對於一些常用的類型來說那算是毫無壓力,比如Function、String、Number、Undefined等,但是要是檢測Array的對象就不起作用了。

代碼如下:

alert(typeof null); // "object"
alert(typeof function () {
return 1;
}); // "function"
alert(typeof '夢龍小站'); // "string"
alert(typeof 1); // "number"
alert(typeof a); // "undefined"
alert(typeof undefined); // "undefined"
alert(typeof []); // "object"

2.instanceof操作符
這個操作符和JavaScript中面向對象有點關系,了解這個就先得了解JavaScript中的面向對象。因為這個操作符是檢測對象的原型鏈是否指向構造函數的prototype對象的。
var arr = [1,2,3,1];
alert(arr instanceof Array); // true
3.對象的constructor屬性
除了instanceof,每個對象還有constructor的屬性,利用它似乎也能進行Array的判斷。

代碼如下:

var arr = [1,2,3,1];
alert(arr.constructor === Array); // true

第2種和第3種方法貌似無懈可擊,但是實斗悶禪際上還是有些漏洞的,當你在多個frame中來空塵回穿梭的時候,這兩種方法就亞歷山大了。由於每個iframe都有一套自己的執行環境,跨frame實例化的對象彼此是不共享原型鏈的,因此導致上述檢測代碼失效!

代碼如下:

var iframe = document.createElement('iframe'); //創建iframe
document.body.appendChild(iframe); //添加到body中
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // 聲明數組[1,2,3]
alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false

檢測數組類型方法
以上那些方法看上去無懈可擊,但是終究會有些問題,接下來向大家提供一些比較不錯的方法,可以說是無懈可擊了。
1.Object.prototype.toString
Object.prototype.toString的行為:首先,取得對象的一個內部屬性[[Class]],然後依據這個屬性,返回一個類似於"[object

Array]"的字元串作為結果(看過ECMA標準的應該都知道,[[]]用來表示語言內部用到的、外部不可直接訪問的屬性,稱為「內部屬性」)。利用這
個方法,再配合call,我們可以取得任何對象的內部屬性[[Class]],然後把類型檢測轉化為字元串比較,以達到我們的目的。

代碼如下:

function isArrayFn (o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
var arr = [1,2,3,1];
alert(isArrayFn(arr));// true

call改變toString的this引用為待檢測的對象,返回此對象的字元串表示,然後對比此字元串是否是'[object
Array]',以判斷其是否是Array的實例。為什麼不直接o.toString()?嗯,雖然Array繼承自Object,也會有
toString方法,但是這個方法有可能會被改寫而達不到我們的要求,而Object.prototype則是老虎的屁股,很少有人敢去碰它的,所以能一定程度保證其「純潔性」罩液:)

JavaScript 標准文檔中定義: [[Class]] 的值只可能是下面字元串中的一個: Arguments,
Array, Boolean, Date, Error, Function, JSON, Math, Number, Object,
RegExp, String.
這種方法在識別內置對象時往往十分有用,但對於自定義對象請不要使用這種方法。
2.Array.isArray()
ECMAScript5將Array.isArray()正式引入JavaScript,目的就是准確地檢測一個值是否為數組。IE9+、
Firefox 4+、Safari 5+、Opera 10.5+和Chrome都實現了這個方法。但是在IE8之前的版本是不支持的。
3.較好參考
綜合上面的幾種方法,有一個當前的判斷數組的最佳寫法:

代碼如下:

var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true

3. js里判斷變數是數組還是對象的四種方法

因為無論是數組還是對象,對於typeof的操作返回值都為object,所以就有了區分數組類型和對象類型的需要:
方一:通過length屬性:一般情況下對象沒有length屬性值,其值為undefiend,而數組的length值為number類型
缺點:非常不實用,當對象的屬性存在length,且其值為number(比如類數組),則該方法失效,不建議使用,看看即可。
*方二:通過instanceof來判斷區分
var arr = [1, 2, 3]; var obj = {name: 'lyl',age: 18, 1: 'name'}console.log(arr instanceof Array); //trueconsole.log(obj instanceof Array); //false
*方三:通過constructor
var arr = [1, 2, 3]; var obj = {name: 'lyl',age: 18, 1: 'name'}console.log(arr.constructor === Array); //trueconsole.log(obj.constructor === Array); //false

4. JS有幾種方法判斷變數的類型

1、使用typeof檢測,當需要判斷變數是否是number,string,boolean,function,undefined等類型時,可以使用typeof進行判斷。

2、使用instanceof檢測,instanceof運算符與typeof運算符相似,用於識別正在處理的對象的類型。與typeof方法不同的是,instanceof方法要求開發者明確地確認對象為某特定類型。

3、使用constructor檢測,construction本來是原型對象上的屬性,指向構造函數。但是根據實例對象尋找屬性的順序,若實例對象上沒有實例屬性或方法時,就去原型鏈上尋找,因此,實例對象也是能使用constructor屬性的。

5. JS判斷對象是否存在的十種方法

可以參考下面的兩種方法:

1、直接判斷對象不為null

if (!myObj) {

var myObj = { };

}

Javascript語言是"先解析,後運行",解析時就已經沖宏完成局鎮了變數聲明

2、使用window對象判斷某對象是否存在

if (!window.myObj) {

var myObj = { };

}

(5)javascript判斷變數是否為對象擴展閱讀:

javascript函數

charCodeAt(index)返回一個整數,該整數表現String對象中指定位置處的字元的Unicode編碼

concat(string2)銜接兩條或少條字元串

fromCharCode(num1, num2, …,BB霜, numN)獲取指定的Unicode值並返回字元串

indexOf(searchString, startIndex) 返回字元串中第一個呈現指定字元串的地位

lastlndexOf(searchString, startIndex) 返回字元串中最後一個呈現指定字散臘冊符串的地位

match(regex) 在字元串中查覓指定值

6. 如何判斷變數是數組還是對象

在JavaScript中所有數據類型嚴格意義上都是對象,但實際使攔磨用中我們還是有類型之分,如果要判斷一個變數是數組還是對簡昌斗象使用typeof搞不定,因為它全都返回object

var o = { 'name':'lee' };
var a = ['reg','blue'];

var getDataType = function(o){
if(typeof o == 'object'){
if( typeof o.length == 'number' ){
return 'Array';
}else{
return 'Object';
}
}else{
return 'param is no object type';
}
};

alert( getDataType(o) ); //迅皮 Object
alert( getDataType(a) ); // Array
alert( getDataType(1) ); // param is no object type
alert( getDataType(true) ); // param is no object type
alert( getDataType('a') ); // param is no object type

7. Javascript如何判斷一個變數是普通變數還是數組還是對象

1、使用typeof操作符檢測變數類型
數組、Null、Object

object
類型
字元串

string
類型
true和false

boolean
類型
整型、浮點型為
number
類型
2、如果要區分數組和非數組對象,需要使用構造函數來判斷
if(arr.constructor==Array)
//
arr
是數組
else
//
arr
不是數組

8. javascript 中的this如何判斷他是代表哪一個對象呢

一.This對象的概述
在javascript編程中,我們經常用到this關鍵字,但有時也經常被它搞得頭暈,下面將說明this的作用范圍與以及它所指代的對象。
This特指當前對象,所有通過this.attr賦予的屬性,都屬於當前對象;那當前對象是什麼呢,它的作用范圍又是什麼呢,在不同情況下,this對象的表現形式各不相同,下面就講講我對this對象的理解。

二.This所指代的對象

1. 對於javascript,它的編寫方式比較隨意,但擴展性很強,我們可以使用面向過程的編寫方式,也可以使用面向對象的編寫方式,在這兩種編寫方式下,this的表現形式是不同的,下面我們先看一下定義變數的一些方式。
下面我們看一個示例(這是一個面向過程的調用方式,先不急於看結果,你可以自己想一下執行結果該是什麼):
functiontest(){
var1=100;
varvar2=100;
this.var3=100;
f1=function(){}
varf2=function(){}
functionf3(){}
this.f4=function(){}
}
test();
alert(typeof var1);
alert(typeof var2);
alert(typeof var3);
alert(typeof f1);
alert(typeof f2);
alert(typeof f3);
alert(typeof f4);

//======以下是上面的執行結果======
1.number
2.undefined
3.number
4.function
5.undefined
6.undefined上面f2的寫法等價於f3的寫法
7.function
解析:我們可以把window看成一個大對象,它是Window對象的實例化,我們編寫的所有javascript代碼都包含在該對象內,因此,當前對象this特指window實例。
1. alert(typeof var1);//number
var1是一個未明確定義的變數,根據作用域范圍定義,該對象屬於window實例的對象,它的作用范圍為全局。
2. alert(typeof var2);//undefined
var2是一個明確定義枯核液的變數,根據作用域范圍定義,該對象的作用域范圍為函數級別,即test函數所屬范圍,因此不可訪問。
3. alert(typeof var3);
var3是以對象屬性的方式定義的,但是test調用的時候卻是氏手以過程的方式調用,也就是說test沒有被實例化成對象,並且test屬於window對象,那麼當前對象this仍然是window,所以var3屬性是屬於window的。
4. alert(typeof f1);
f1函數與var1變數同理
5. alert(typeof f2);
f2函數與var2變數同理
6. alert(typeof f3);
f3函數與var2變數同理
7. alert(typeof f4);
f4函數與var3變數同理
//===============================

下面是一個面向對象的調用示例:
functiontest(){
var1=100;
varvar2=100;
this.var3=100;
f1=function(){}
varf2=function(){}
functionf3(){}
this.f4=function(){}
}
t =newtest();
alert(typeof var1);
alert(typeof var2);
alert(typeof var3);
alert(typeof t.var3);
alert(typeof f1);
alert(typeof f2);
alert(typeof f3);
alert(typeof f4);
alert(typeof t.f4);
//======以下是上面的執行結果======
1. Number
2. Undefined
3. Undefined
4. Number
5.沒物 Function
6. Undefined
7. Undefined
8. Undefined
9. Function
解析:這次test是使用面向對象的方式調用的,下面我們看一下,為何執行結果會是如此:
1. alert(typeof var1);還是作用域的問題,未明確定義為全局變數
2. alert(typeof var2);明確定義,為函數級別變數
3. alert(typeof var3);
因為test當前是使用面向對象的方式調用的,那麼test對象中的當前對象為實例化的test,即this已經不是window對象了,而是test的實例化t
4. alert(typeof t.var3);
由上面解析可知,var3屬於對象t,那麼自然可以獲得此變數
5. alert(typeof f1);同理var1
6. alert(typeof f2);同理var2
7. alert(typeof f3);同理var2
8. alert(typeof f4);同理var3
9. alert(typeof t.f4);同理var3

三.This的操作與修改
上面我們了解了一下this指代的對象和作用范圍,但實際上this是可以被指定修改的,我們可以通過call,apply等函數指定當前函數的this對象,通常這些函數也用於繼承的實現。
如上面的函數通過call來調用指定this對象,將獲得完全不同的執行結果,以下我們通過call實現了javascript的繼承。
functionf1(){
this.age=27;
}
functiontest(){
f1.call(this);
this.address='地址';
}
t=newtest();
alert(t.age);
alert(t.address);

不是原創的,希望對你有幫助。

9. nodejs中怎麼判斷一個對象類型

代碼如下:

function checkUnfined(value){

if(typeof(value)=='undefined'){

return "";

}

return value;

}

10. js判斷一個變數或對象是否存在

1、首先創建兩個文件,一個jstest.html,一個jstest.js文件。

閱讀全文

與javascript判斷變數是否為對象相關的資料

熱點內容
藏文軟體app怎麼可以下載 瀏覽:960
鍵盤文件名 瀏覽:538
電腦自帶驅動在那個文件夾 瀏覽:531
c窗體讀取文件夾 瀏覽:965
asp婚紗攝影網站 瀏覽:684
文件恢復的原理 瀏覽:828
移動硬碟清空怎麼恢復數據 瀏覽:433
文件保存電腦桌面英文 瀏覽:128
debian共享文件夾 瀏覽:633
平安易貸不用app怎麼審核 瀏覽:883
如何學習編程環境 瀏覽:335
榮耀6升級60 瀏覽:281
如何點擊移動數據開啟 瀏覽:95
javajdbcmysql增刪改查 瀏覽:844
新的熔點儀為什麼測不出來數據 瀏覽:364
淘寶滾動海報代碼 瀏覽:953
如何查看本機sdk版本 瀏覽:678
lua2進制文件 瀏覽:710
除了plc編程還有什麼技巧 瀏覽:320
電視無線網路已關閉如何開啟 瀏覽:430

友情鏈接