javascript運算符語法概述

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/07/13/5666530.html
-Advertisement-
Play Games

[1]個數 [2]優先順序 [3]結合性 [4]類型 [5]規則表 ...


×
目錄
[1]個數 [2]優先順序 [3]結合性[4]類型[5]規則表

前面的話

  javascript中的運算符大多由標點符號表示,少數由關鍵字表示,它們的語法言簡意賅,它們的數量卻著實不少。運算符始終都遵循著一些固定語法,只有瞭解並掌握這些內容,才能正確使用運算符。本文將主要介紹javascript運算符的語法概述

 

操作數個數

  javascript的運算符總共有46個,如果根據其操作數的個數進行分類,則大多數是二元運算符(binary operator),它們的操作數都是兩個,它們將兩個表達式合併成複雜表達式

1 + 2;
true || false;

  javascript中的一元運算符(unary operator)將一個表達式轉換為另一個稍複雜的表達式,主要包括以下9個:

++ -- - + ~ ! delete typeof void
a++;
typeof true;

  javascript只有一個三元運算符(ternary operator),是條件判斷運算符?:,它將三個表達式合併成一個表達式

2>1 ? 2 : 1;

 

優先順序

  運算符優先順序控制著運算符的執行順序,優先順序高的運算符的執行總是先於優先順序運算符低的運算符

  46個運算符總共分為14級的優先順序,從高到低依次是:

1  ++ -- - + ~ ! delete typeof void
2  * / %
3  + -
4  << >> >>>
5  < <= > >= instanceof in
6  == != === !==
7  &
8  ^
9  |
10 &&
11 ||
12 ?:
13 = *= /= %= += -= &= ^= |= <<= >>= >>>=
14 ,

  由這14級的運算符優先順序等級可以看出:

一元運算符  > 算術運算符 > 比較運算符 > 邏輯運算符 > 三元運算符 > 賦值運算符 > 逗號運算符

  [註意]邏輯取反運算符屬於一元運算符,其優先順序最高

例子

!2<1&&4*3+1;

  像上面這種情況就比較複雜,逐步來分解其運算順序

  先計算一元運算符!,!2;//false

//於是表達式變為
false < 1 && 4*3 + 1;

  計算算術運算符4*3+1;//13

//於是表達式變為
false < 1 && 13;

  計算比較運算符<,false<1;//true

//於是表達式變為:
true && 13;//13

  可以使用圓括弧來強行指定運算次序

2+3*5;//17
(2+3)*5;//25;

 

結合性

  運算符具有兩種結合性,一種是從左向右結合,記號為L,一種是從右向左結合,記號為R。結合性指定了在多個具有同樣優先順序的運算符表達式中的運算順序

  多數運算符都具有從左向右的結合性,只有一元運算符、條件運算符和賦值運算符具有從右向左的結合性

w = x + y + z;
//等價於:
w = ((x + y)+ z);
w = x = y = z;
//等價於:
w = (x = (y = z));
q = a ? b : c ? d : e ? f : g;
//等價於:
q = a ? b : (c ? d : (e ? f : g));    

  運算符的優先順序和結合性決定了它們在複雜表達式中的運算順序,但子表達式相互有影響時,順序會發生變化

例子

a = 1;
b = a++ + a-- * a++;

  先分析該表達式中,根據優先順序的順序,分別運算遞增運算符、乘法運算符、加法運算符和賦值運算符

  先計算第一個a++;//結果為1,a為2

//表達式變成
b = 1 + a-- * a++;

  計算a--;//結果為2,a為1

//表達式變成
b = 1 + 2 * a++;

  計算第二個a++;//結果為1,a為2

//表達式變成
b = 1 + 2 * 1;

  所以,最終a = 2; b = 3;

a = 1;
b = a++ + a-- * a++;
console.log(a,b);//2 3
//類似地
a = 1;
b = a-- * a++ + a++;
console.log(a,b);//2,1

 

類型

  一些運算符可以作用於任何數據類型,但仍然希望它們的操作數是指定類型的數據,並且大多數運算符返回一個特定類型的值,在下麵的運算符規則表中,箭頭前為運算符操作數的類型,箭頭後為運算結果的類型

【左值】

  左值(lvalue)是一個古老的術語,指表達式只能出現在運算符的左側

  在javascript中,變數、對象屬性和數組元素都是左值

  遞增運算符++、遞減運算符--和賦值運算符的操作數類型是左值

var a = 3;
a++;//3
3--;//報錯
({}).a += '1';//'undefined1'
'test' -= 'test';//報錯

 

運算符規則表

運算符             操作                 類型
++ 增量 lval->num -- 減量 lval->num - 求反 num->num + 轉換為數字 num->num ~ 按位求反 int->int ! 邏輯非 bool->bool delete 刪除屬性 lval->bool typeof 檢測類型 any->str void 返回undefined any->undef ****************************************************** * \ % 乘、除、求餘 num,num->num ****************************************************** + - 加、減 num,num->num + 字元串連接 str,str->str ****************************************************** << 左移位 int,int->int >> 有符號右移位 int,int->int >>> 無符號右移位 int,int->int ****************************************************** < <= > >= 比較數字順序 num,num->bool < <= > >= 比較字母表順序 str,str->bool instanceof 測試對象類 obj,func->bool in 測試屬性 str,obj->bool ****************************************************** == 判斷相等 any,any->bool != 判斷不等 any,any->bool === 判斷恆等 any,any->bool !== 判斷非恆等 any,any->bool ****************************************************** & 按位與 int,int->int ****************************************************** ^ 按位異或 int,int->int ****************************************************** | 按位或 int,int->int ****************************************************** && 邏輯與 any,any->any ****************************************************** || 邏輯或 any,any->any ****************************************************** ?: 條件運算符 bool,any,any->any ****************************************************** = 賦值 lval,any->any *= /= %= += -= &= 運算且賦值 lval,any->any ^= |= <<= >>= >>>= ****************************************************** , 忽略第一個操作數, any,any->any 返回第二個操作數

 

參考資料

【1】 阮一峰Javascript標準參考教程——運算符 http://javascript.ruanyifeng.com/grammar/operator.html#toc29
【2】《javascript權威指南(第6版)》第4章 表達式和運算符


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這幾天做的項目要求用樹形表格的形式展示一部分數據,於是就想到了使用easyUI的treegrid組件,但幾經翻查各種資料,發現數據類型大多採取標準數據類型,即包含children元素的數據類型,小編查遍各種資料,幾經實驗,小編找到了一種使用簡單數據類型的展示樹形表格的方法。在這裡介紹給大家,僅供參考 ...
  • W3C盒子模型和IE盒子模型CSS佈局經典盒子模型(轉) 盒子模型是css中一個重要的概念,理解了盒子模型才能更好的排版。其實盒子模型有兩種,分別是 ie 盒子模型和標準 w3c 盒子模型。他們對盒子模型的解釋各不相同,先來看看我們熟知的標準盒子模型: 從上圖可以看到標準 w3c 盒子模型的範圍包括 ...
  • 內聯元素,與別人公用一行,但是設置寬高無效。其特點: ①和其他元素都在一行上; ②高,行高及外邊距和內邊距不可改變; ③寬度就是它的文字或圖片的寬度,不可改變 ④內聯元素只能容納文本或者其他內聯元素 代碼如下: 1 <!doctype html> 2 <html lang="en"> 3 <head ...
  • 塊級元素,簡單來說,就是自己獨占一行的元素。其特點: ①總是在新行上開始; ②高度,行高以及外邊距和內邊距都可控制; ③寬度預設是它的容器的100%,除非設定一個寬度。 ④它可以容納內聯元素和其他塊元素 彙總代碼如下: 1 <!doctype html> 2 <html> 3 <head> 4 <m ...
  • 一、開端 真的是忙完這一陣子就可以忙下一陣子了啊。。。 最近在做一個angularJS+Ionic的移動端項目。。。記錄一些技巧,方便自己以後查閱,也方便需要的人可以看一看...^_^ 二、基礎原則瞭解 ①angular的一些入門瞭解 一、基礎知識 1.angular放棄了IE8 2.四大核心分別是 ...
  • javascript超過容器後顯示省略號效果 在實際的項目中,由於文字內容的長度不確定性和頁面佈局的固定性,難免會出現文字內容超過div(或其他標簽,下同)區域的情況,此時比較好的做法就是當文字超過限定的div寬度後自動以省略號(…)顯示,這樣,按照習慣,人們都會知道這兒有文字被省略了。css中有個... ...
  • 關於文件狀態 一般倉庫中的文件可能存在於這4種狀態: 1)Untracked files → 文件未被跟蹤(A) 2)Untracked but not Change → 已跟蹤,但是未修改(B) 3)Changes but not updated → 已跟蹤,文件被修改,但並沒有添加到暫存區(C) ...
  • 1.變數的命名 方法的命名(駝峰命名法) 全部小寫 : 單詞與單詞之間全部下劃線 (my_namespace) 大小寫混合 : 第一個單詞首字母小寫其他單詞首字母大寫。 規則 首字元 英文字母或下劃線 組成 英文字母 數字 下劃線 禁忌 JavaScript 關鍵字 保留字 2. 變數的聲明 顯示聲 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...