1. 程式人生 > >Javascript中判斷一個值是否為undefined的方法詳解

Javascript中判斷一個值是否為undefined的方法詳解

相信大家都知道當宣告一個變數,並且沒有給賦值的情況下,它的初始值是undefined。但是在javascript中,怎麼檢查一個值是否為undefined呢?

簡單來說,在現代瀏覽器中,你可以安全的比較變數是否為undefined

?
1if (name === undefined) {...}

一些人反對直接使用undefined變數進行比較,因為在舊的瀏覽器中允許它的值被重新賦值,比如下面這樣:

?
1undefined = "test"

在被重新賦值後,使用undefined指令將不能正確的檢測一個變數是否被賦值。

不過,這個行為在2009年的ECMAScript 5被修復了。

?
1215.1.1.3 undefined
The value of undefined is undefined (see 8.1). This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.

在現代瀏覽器中,undefined的值將不能被重寫

我們需要支援IE8或者更古老的瀏覽器怎麼辦

通常undefined指令是安全的。在應用中並沒有什麼理由需要修改undefined的值。

Thomas的回答使用具有說服力的推理,論證了這一點。

?
12I don't hear people telling me that I shouldn't use setTimeout because someone can
我不聽別人告訴我,我不應該使用setTimeout,因為有的人像這樣用:
?
123window.setTimeout = function () {alert("Got you now!");};

下面一行,“它可以被重新賦值”,raw === undefined返回false

如果你仍然很在意,有兩個方法可以檢查一個值是否為undefined,即使全域性window.undefined已經被重寫

?
1if (name === void(0)) {...}

在這個例子中0沒有任何實際意義,你想要使用 1 or function(){}也無所謂。 void(anything)都會計算得到undefiend

另外一種選擇,你可以使用typeof操作符安全地檢查是否已經被賦值。你可以檢查一個值的型別是否為”undefined”代替與全域性的undefined比較.

?
1if (typeof name === "undefined") {...}

注意第二個選擇與前一個方案稍微有點差異.儘管name沒有被宣告,typeof會返回他是undefined。如果你直接使用name與undefinedor void(0)你會得到ReferenceError異常的錯誤.

但是不要使用VOID(0)指令

在程式碼中避免使用void(0)或者 typeof x === "undefined" ,你可以使用isUndefined function方法把他們包起來,這樣你使用的時候就不用再特意說明了.

?
12345function isUndefined(value){//獲得undefined,保證它沒有被重新賦值var undefined = void(0);return value === undefined;}

一些工具庫已經部署了這個方法,例如: _.isUndefinedunderscore中的isUndefined方法

相關推薦

Javascript判斷一個是否undefined方法

相信大家都知道當宣告一個變數,並且沒有給賦值的情況下,它的初始值是undefined。但是在javascript中,怎麼檢查一個值是否為undefined呢?簡單來說,在現代瀏覽器中,你可以安全的比較變數是否為undefined?1if (name === undefined

JavaScript判斷一個物件是否一個類的例項

JavaScript中判斷一個物件 是否為一個類的例項主要有兩種方法,即instanceof和constructor,前者的用法是:result = object instanceof class返回一個boolean值

java判斷一個字串是否整型數字

/** * 判斷字串是否為數字 */ public static boolean isNumeric(String str){ Pattern patte

Oracle判斷一個字串是否全數字

1、regexp_like SELECT * FROM ( SELECT 'ABC#$&' AS data from dual UNION ALL SELECT 'AB123' AS data

js 判斷一個物件是否方法總結

通常情況下,工作中寫邏輯的時候都會用到判斷一個物件是否為空的方法,巧的是今天正好有人問我這個問題,我竟然沒回答上來,很尷尬,決定研究一下總結下來,之前研究過但是久了不用就生疏了!大意啊 1.將json物件轉化為json字串,再判斷該字串是否為"{}" var data = {};

javascript判斷資料型別的四種方法及typeof、instanceof、constructor、toString

在 ECMAScript 規範中,共定義了 6種資料型別,分為 基本型別 和 引用型別 兩大類,如下所示: 基本型別(簡單型別):String、Number、Boolean、Undefined、Null 。由於其佔據空間固定,是簡單的資料段,為了便於提升變數查

C++判斷一個檔案是否存在的方法

最進在寫的一個系統需要儲存結果資料,但是儲存結果資料的時候,如果那個資料已經存在,就會無法儲存,所以就需要先判斷是否存在該資料,判斷方法如下: #include<iostream> #include<fstream> using namespace

JavaScript實現一個整數階乘的方法

計算一個整數的階乘,如果用字母n來代表一個整數,階乘代表著所有小於或等於n的整數的乘積。階乘通常簡寫成 n!     例如: 5! = 1 * 2 * 3 * 4 * 5 = 120(1)第一種方法使用for迴圈來實現階乘的效果function factorialize(nu

HTMLjavascript的<script>標簽使用方法

mime類型 jsp source 方式 clas 處理 網頁 鏈接 屬性。 原文地址:HTML中javascript的<script>標簽使用方法詳解 只要一提到把JavaScript放到網頁中,就不得不涉及Web的核心語言——HTML。在當初開發javasc

javascript的事件委托或是事件代理

開始 reat 事件 網上 html 比較 移動 由於 move 概述: 那什麽叫事件委托呢?它還有一個名字叫事件代理,JavaScript高級程序設計上講:事件委托就是利用事件冒泡,只指定一個事件處理程序,就可以管理某一類型的所有事件。那這是什麽意思呢?網上的各位大牛們講

JavaScriptbind、call、apply函式用法

在給我們專案組的其他程式介紹 js 的時候,我準備了很多的內容,但看起來效果不大,果然光講還是不行的,必須動手。前幾天有人問我關於程式碼裡 call() 函式的用法,我讓他去看書,這裡推薦用js 寫伺服器的程式猿看《javascript程式設計精粹》 這本書,crockfo

javascript建立變數時作用域和記憶體

<span style="font-size:18px;">// 執行環境:定義了變數或函式有權訪問的其他資料,決定了它們各自的行為; // 在Web瀏覽器中,全域性執行環境=window物件; // 因此所有的全域性變數和函式都是作為window物件的屬性和方法建立的; var box =

php二維數組排序問題方法

ges cti cmp each ace esc 對數 x11 用法 PHP中二維數組排序,可以使用PHP內置函數uasort() 示例一: 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯 回調函數如下:註意回調函數的返回值是負數或者是false的時候,表

JavaScript | 創建對象的9種方法

arr 常見 安全 圖解 margin cor *** 解析 刪除 ————————————————————————————————————————————————————————— 創建對象 標準對象模式 "use strict"; // *************

JS的call、apply、bind方法

面試 glob ble ole 內部 修改 sta illegal 解決 bind 是返回對應函數,便於稍後調用;apply 、call 則是立即調用 。 apply、call 在 javascript 中,call 和 apply 都是為了改變某個函數運行時的上下文(

jsstring之正則表示式replace方法

本篇文章主要介紹了js中string之正則表示式replace方法詳解,replace方法是javascript涉及到正則表示式中較為複雜的一個方法,嚴格上說應該是string物件的方法。 replace方法是javascript涉及到正則表示式中較為複雜的一個方法,嚴格上說應該是string物

javascript的offset、client、scroll使用方法

offsetTop 指元素距離上方或上層控制元件的位置,整型,單位畫素。 offsetLeft 指元素距離左方或上層控制元件的位置,整型,單位畫素。 offsetWidth 指元素控制元件自身的寬度,整型,單位畫素。 offsetHeight 指元素控制元件自身的高度,整型,單位畫素。 網

java的arraycopy(),copyOf()和copyOfRange()方法

java語言提供了很多的方法來對陣列進行復制。其中我們常用的方法有三種,下面一一列舉出來 1. arraycopy()方法 函式原型:arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src: 原陣列

Linux讓alias設定永久生效的方法

前言 經常使用Linux控制檯終端的站長們應該對於那些繁瑣的指令和引數命令列印象深刻吧!這也是很多站長寧願使用有安全風險的面板也不願意使用控制檯終端命令列的主要原因!好在,明月早年間的DOS下學習程式設計的經歷,對於這種命令列式的風格還是偏愛有加,但對於那些幾乎經常要用到的命令列每次都要重複性的

javascript判斷一個物件是否陣列學習js語法

1,真正的陣列的判斷方法 javascript中最簡單的宣告陣列方法為: var a = []; 判斷是否為陣列的最直接的方法為: a instanceof Array //true a .constructor == Array //true 這裡涉及到一個i