這篇文章帶給大家的內容是關於JavaScript中typeof與instanceof之間的區別介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
JavaScript 中typeof 和 instanceof 常用來判斷變數是否為空,或是哪一類型的。但它們之間還是有區別的:
typeof
typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意型別。
它傳回值是一個字串,該字串說明運算數的類型。 (typeof 運算子傳回一個用來表示表達式的資料型別的字串。)
typeof其實就是判斷參數是什麼型別的實例,就一個參數
##typeof 一般只能傳回如下幾個結果:"number"、"string"、"boolean"、"object"、"function" 和"undefined"。 運算數為數字 typeof(x) = "number"字串 typeof(x) = "string"布林值 typeof(x) = "boolean" 物件,陣列與null typeof(x) = "object"函數 typeof(x) = "function"console.log(typeof (123));//typeof(123)返回"number" console.log(typeof ("123"));//typeof("123")返回"string" var param1 = "string"; var param2 = new Object(); var param3 = 10; console.log(typeof(param1)+"\n"+typeof(param2)+"\n"+typeof(param3)); // string object number我們可以使用 typeof 來取得一個變數是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因為如果a 不存在(未聲明)則會出錯,對於Array,Null 等特殊對象使用typeof 一律回傳object,這正是 typeof 的限制。 經常會在js裡用到數組,比如多個名字相同的input, 若是動態生成的, 提交時就需要判斷其是否是數組.
if(document.mylist.length != "undefined" ) {} //这个用法有误. 正确的是 `if( typeof(document.mylist.length) != "undefined" ) {}` 或 `if( !isNaN(document.mylist.length) ) {}`typeof的運算數未定義,回傳的就是"undefined".在JavaScript 中,判斷一個變數的型別嚐嚐會用 typeof 運算符,並在使用 typeof 運算子時採用引用型別儲存值會出現一個問題,無論引用的是什麼類型的對象,它都會回傳“object”。這就需要用到instanceof來偵測某個物件是不是另一個物件的實例。
instanceof
instanceof 運算子用來測試一個物件在其原型鏈中是否存在一個建構子的 prototype 屬性。 語法:object instanceof constructor參數:object(要偵測的物件.)constructor(某個建構子)
說明:instanceof 運算子用來偵測 constructor.prototype 是否存在於參數 object的原型鏈上。
如 :var a=new Array(); alert(a instanceof Array); // true, 同时 alert(a instanceof Object) //也会返回 true; 这是因为 Array 是 object 的子类。 再如:function test(){}; var a=new test(); alert(a instanceof test) 会返回true alert(a==b); //flase案例:
另外,更重的一点是 `instanceof` 可以在继承关系中用来判断一个实例是否属于它的父类型。 例如: function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型继承 var foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true 上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。 又如: console.log(Object instanceof Object);//true console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false console.log(String instanceof String);//false console.log(Function instanceof Object);//true console.log(Foo instanceof Function);//true console.log(Foo instanceof Foo);//false
// 定义构造函数 function C(){} function D(){} var o = new C(); // true,因为 Object.getPrototypeOf(o) === C.prototype o instanceof C; // false,因为 D.prototype不在o的原型链上 o instanceof D; o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true C.prototype instanceof Object // true,同上 C.prototype = {}; var o2 = new C(); o2 instanceof C; // true o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上. D.prototype = new C(); // 继承 var o3 = new D(); o3 instanceof D; // true o3 instanceof C; // true談到 instanceof 我們要多插入一個問題,就是 function的 arguments,我們大家也許都認為 arguments 是一個 Array,但如果使用 instaceof 去測試會發現 arguments 不是一個 Array 對象,儘管看起來很像。 另外:測試var a=new Array();if (a instanceof Object) alert('Y');else alert('N');#得'Y'但if (window instanceof Object) alert('Y');else alert('N');得'N'所以,這裡的instanceof 測試的object 是指js 語法中的object,不是指dom 模型物件。 使用 typeof 會有些差異alert(typeof(window)) 會得到object要注意的是,如果表達式obj instanceof Foo 回傳true,則不意味著該表達式會永遠回傳ture,因為Foo.prototype屬性的值有可能會改變,改變之後的值很有可能不存在於obj的原型鏈上,這時原始表達式的值就會變成false。另外一種情況下,原表達式的值也會改變,就是改變物件obj的原型鏈的情況,雖然在目前的ES規範中,我們只能讀取物件的原型而不能改變它,但藉助於非標準的__proto__魔法屬性,是可以實現的。例如執行obj.__proto__ = {}之後,obj instanceof Foo就會回傳false了。 範例: 顯示String物件和Date物件都屬於Object型別
下面的程式碼使用了instanceof來證明:String和Date物件同時也屬於Object型別。
例子: 表明String对象和Date对象都属于Object类型 下面的代码使用了instanceof来证明:String和Date对象同时也属于Object类型。 var simpleStr = "This is a simple string"; var myString = new String(); var newStr = new String("String created with constructor"); var myDate = new Date(); var myObj = {}; simpleStr instanceof String; // returns false, 检查原型链会找到 undefined myString instanceof String; // returns true newStr instanceof String; // returns true myString instanceof Object; // returns true myObj instanceof Object; // returns true, despite an undefined prototype ({}) instanceof Object; // returns true, 同上 myString instanceof Date; // returns false myDate instanceof Date; // returns true myDate instanceof Object; // returns true myDate instanceof String; // returns false
以上是JavaScript中typeof與instanceof之間的差異介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。