1. 程式人生 > >javascript 操作符小結

javascript 操作符小結

簡單總結一下JavaScript的幾個操作符: var、 in、 delete、 typeof、 new、 instanceof、void

var

定義變數要使用var操作符, 使用var操作符定義的變數將成為該變數的作用域中的區域性變數。 也就是說,如果在函式中定義一個變數, 那麼這個變數在函式退出後就會被銷燬。

省略var操作符可以定義全域性變數, 但是不推薦這樣的做法。 因為在區域性作用域中定義的全域性變數很難維護。

in

in操作符有兩種使用方式:for-in迴圈 及 單獨使用。 單獨使用的時候,如果 in操作符 能通過右側的物件訪問左側給定的屬性,無論該屬性存在例項還是原型,返回true。

例1:

 var a = 10;
 if(a in window) {
     alert(a);  //"10"
 }

例2:

 function fn (){};
 fn.prototype.a = function(){};
 var fn1 = new fn();
 alert("a" in fn1);  // true

delete

delete可以刪除物件屬性或者陣列元素。 當刪除一個屬性的時候, 這個屬性將不再存在。 讀取一個不存在的屬性將返回 undefined , 但是可以通過in運算子來檢測這個屬性是否存在物件中。

例1:

 var obj = {x: 1, y: 2};
 delete obj.x;
 alert(obj.x in obj);  //false

 var arr = [1,2,3];
 delete arr[0];
 alert(0 in arr);    //false
 alert(arr.length);  //"3", 儘管刪除了元素, 但是留下了一個“洞”, 陣列的長度不變。

delete的運算元應該是一個 左值 ,如果它不是左值, 那麼delete將不進行任何操作同時返回true; 如果delete刪除成功或刪除不存在的屬性時, 會返回true。 然而並不是所有屬性都可以刪除,一些內建核心和客戶端屬性是 不能刪除的, 使用者通過var 語句宣告的變數不能刪除, 通過function語句定義的函式和函式引數也不能刪除。

在ECMAScript 5嚴格模式中, 如果delete運算元是非法的, 將會丟擲一個語法錯誤異常, 在非嚴格模式下, 只會簡單的返回false不會報錯。

例2:

 var obj = {x: 1, y: 2};
 delete obj.x;  //true
 "x" in obj;    //false
 delete obj.x;  //刪除不存在的屬性, 返回true
 delete obj;  //不能刪除通過var宣告的變數, 返回false 
             //嚴格模式下,將丟擲異常    
 delete 1;  //不是左值, 返回true;
 delete x;  //試圖刪除它, 在非嚴格模式下返回 true; 
            //嚴格模式下,丟擲異常    

在JavaScript中,變數、物件屬性、陣列元素均是左值。

typeof

typeof操作符可以用來檢測變數的型別,對一個值使用typeof可能返回下列某個字串

  • “undefined” — 如果這個值未定義
  • “boolean” — 如果這個值是布林值
  • “string” — 如果這個值是字串
  • “number” — 如果這個值是數值
  • “object” — 如果這個值是物件或null
  • “function” — 如果這個值是函式

從技術角度講,函式在ECMAScript中是物件,不是一種資料型別。 然而,函式也確實有一些特殊的屬性,因此通過typeof操作符來區分函式和其他物件是有必要的

要檢測一個變數是不是基本資料型別,typeof操作符是最佳的工具。但在檢測引用資料型別的值時,這個操作符的用處不大。 通常我們並不想知道某個值是物件,而是想知道它是什麼型別的物件, 為此使用 instaceof操作符比較適合。 instanceof操作符在下邊會有介紹。

new

new操作符用來建立例項。 任何函式,只要通過new操作符來呼叫,那它就可以作為建構函式;而任何函式,如果不通過new操作符來呼叫, 那它跟普通函式就沒有什麼兩樣。

使用new操作符呼叫建構函式實際上會經歷一下4個步驟:

  • 建立一個新物件
  • 將建構函式的作用域賦給新物件(因此this就指向了這個新物件)
  • 執行建構函式中的程式碼(為這個新物件新增屬性)
  • 返回新物件

instanceof

instanceof可以確定物件的型別,如果左側的物件是右側型別的例項(這個判斷也會包括對“父類”的檢測),那麼instanceof操作符就會返回true。

例1:

 var arr = new Array();
 var reg = new RegExp();
 alert(arr instanceof Array);      //true
 alert(reg instanceof RegExp);     //true
 alert(arr instanceof Object);      //true        
 alert(reg instanceof Object);     //true

根據規定,所有引用型別的值都是Object的例項。 因此,在檢測一個引用型別值和Object建構函式時,instanceof操作符始終返回true。 如果用instanceof檢測基本型別的值,始終會返回false, 因為基本型別不是物件。

例2:

 function fn(){};
 function fnSub() {};
 fnSub.prototype = new fn();  
 var fn1 = new fnSub();      
 alert(fn1 instanceof Object);  //true
 alert(fn1 instanceof fn);      //true
 alert(fn1 instanceof fnSub);   //true

在這個例子中,我們可以說fn1是Object、fn、fnSub任何一個型別的例項,因此測試這三個建構函式都返回了true。

void

void的運算元可以是任意值, 這個運算子不經常使用, 運算元會照常計算, 但忽略其計算結果並返回 undefined 。

void最常用在客戶端URL — javascript:URL 中,讓URL中可以寫有副作用的表示式,而瀏覽器不必顯示錶達式的計算結果。

例1:

 <a href="javascript:window.open()">click</a>
 <a href="javascript:void window.open()">click</a>

例2:

 <a href="#">click</a>
 <a href="javascript:void #">click</a>

使用void操作符返回undefined, 所以點選過頁面會定位在原來的位置。

通過新增 #+錨名稱 至URL末端的方式訪問錨點,假如瀏覽器找不到該錨點,就會定位到文件的頂端

相關推薦

javascript 操作符小結

簡單總結一下JavaScript的幾個操作符: var、 in、 delete、 typeof、 new、 instanceof、void var 定義變數要使用var操作符, 使用var操作符定義的變數將成為該變數的作用域中的區域性變數。 也就是說,如果在函式中定義一個變數, 那麼這個變數在函式退出

javascript 操作符

有一個 ssa init logs 求反 兩個 tolower -1 值轉換 操作符包括算數操作符(如加號和減號),位操作符,關系操作符和相等操作符 在ecmaScript 中,在操作符應用於對象時,相應的操作符通常都會調用對象的valueOf()或者toString()方

JavaScript操作符-3

返回值 == 邏輯操作符 否則 pan 第一個 cal 不一定 align 學習目標 1.掌握什麽是表達式 2.掌握javascript操作符的分類 3.掌握算數操作符 什麽是表達式 將類型的數據(如常量、變量、函數等),用運算符號按一定的規則鏈接起來的、有意義的式子稱為表

javascript中的一元操作符

-s -1 () 方法 pre -o bsp 執行 fun 題目如下: var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var = { valueOf: functi

通過例子深入理解javascript中的new操作符

not 而是 efi undefine new blog div 函數功能 成功 1.首先看一道題目 1 function Cat(name,age){ 2 this.name=name; 3 this.age=age; 4 } 5 console.l

javascript篇-----操作符

真值表 .cn class 二進制補碼 輸出 false 有符號 位置 如果   ECMA-262描述了一組用於操作數據值的操作符,包括算數操作符 、位操作符、關系操作符和相等操作符。ECMAScript操作符的與眾不同之處在於,它們能夠適用於很多值,例如字符串、數字值、布

javascript高級程序設計學習小結1

高級程序設計 十進制 下載 延時 窗口 bool dom fine 包含 1. 一個完整的javascript實現由三部分組成:核心(ECMAScript)、文檔對象模型(DOM)以及瀏覽器對象模型(BOM),ECMAScript就是對標準規定的如語法、類型、語句、關鍵字、

JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的區別

定義 typeerror 轉換 異常 error: pan 不同 html gree   ECMAScript將對象的屬性分為兩種:數據屬性和訪問器屬性。每一種屬性內部都有一些特性,這裏我們只關註對象屬性的[[Enumerable]]特征,它表示是否通過 for-in 循環

javascript高級程序設計學習小結3

har cte url all view call 進行 擁有 發送請求 DOM2級只是在DOM1級的基礎上通過增加新方法和新屬性來增強既有類型,Node類型的變化: localName(不帶命名空間前綴的節點名稱), namespaceURI(命名空間URI或者null)

JavaScript(四)操作符

都是 null amp 關系 value num ascii碼 inf java 6種表達式   原始表達是   初始化表達式  函數定義表達式     函數調用表達式  屬性訪問表達式  對象創建表達式 操作符   操作符的優先級     屬性訪問[] . &g

C#中的is和as操作符區別小結

devel 獲取 d3d 數據 bottom 技術 datagrid idv center 1. is 是驗證操作對象是不是自己希望的 運算公式:對象 is 類型 返回true:對象是指定類型 返回false:對象不是指定類型 2. as 是將對象轉換成指定類型

javascript小結

內置 url length 程序員 等於 開始 blog rscript classname 時間:2017年12月17日 20:53:43 用於:個人總結 javascript知識點總結:1.獲取對象:document.getElementById("id")/doc

JavaScript的self和this使用小結

js中this用法一、self  這個非常簡單。我們知道,打開任何一個網頁,瀏覽器會首先創建一個窗口,這個窗口就是一個window對象,也是js運行所依附的全局環境對象和全局作用域對象。self 指窗口本身,它返回的對象跟window對象是一模一樣的。也正因為如此,window對象的常用方法和函數都可以用se

JavaScript操作符

關系 算數 == 運算 ava scrip 算數運算 color 三元運算符 操作符:1.算數運算符 + - * / % 算數運算表達式:由算數運算符連接起來的表達式 2.一元運算符 ++ -- 3.二元運算符 需要兩個操作數就可以運算3.三元運算

談談JavaScript中void操作符的使用

1.首先最常見的是在a標籤中  href="javascript:void(0)" 這個用法不用解釋。 類似的在img標籤中,如有空img,那麼: src="javascript:void(0)" 這樣做對伺服器是有好處的。 2.void 0 先看段程式碼

JavaScript - 基本操作符

算數運算子:加( + )  減( - )  乘( * )  除( / ) 字串連線:1.加號連線 ( + )  2.操作字串中有字元,會先將數值轉化為字串再連線  布林操作符 (邏輯操作符):或 ( || )&nb

javascript的帶操作符的賦值運算

看犀牛書發現的問題 下面兩個表示式 表示式一 data[i++] *= 2; 表示式二 data[i++] = data[i++] * 2;   var data = [7,8,9]; var i = 0; data[i++] *= 2; 結果 > data[0]

JavaScript的邏輯和比較運算子小結

邏輯運算子:( && , || , ! ) 與操作( && ): 運算元同時為true返回true,操作有一個false就返回false 如果第一個運算元是物件,返回第二個運算元    例:var b = "a

JavaScript建立物件方法例項小結

本文例項講述了JavaScript建立物件方法。分享給大家供大家參考,具體如下: 最簡單的方式就是建立一個Object物件,併為其新增屬性和方法。 //示例程式碼 var person=new Object() person.name="yumi" person.age=18 person.

javascript 函式function前面的一元操作符, 感嘆號、小括號、一元操作符!()+-||

// 寫的最清晰易懂的一篇文章,贊 https://colobu.com/2014/10/13/javascript-function-and-unary-operators/ 原來,使用括號包裹定義函式體,解析器將會以函式表示式的方式去呼叫定義函式。也就是說,任何能將函式變成一個函式表示式