javascript基礎語法——表達式

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/06/06/5564401.html
-Advertisement-
Play Games

× 目錄 [1]原始表達式 [2]複雜表達式 前面的話 一般,關於javascript基礎語法,人們聽得比較多的術語是操作符和語句。但,其實還有一個術語經常使用,卻很少被提到,這就是javascript表達式(expression)。本文將詳細介紹javascript表達式,表達式分為原始表達式和復 ...


×
目錄
[1]原始表達式 [2]複雜表達式

前面的話

  一般,關於javascript基礎語法,人們聽得比較多的術語是操作符和語句。但,其實還有一個術語經常使用,卻很少被提到,這就是javascript表達式(expression)。本文將詳細介紹javascript表達式,表達式分為原始表達式和複雜表達式

 

原始表達式(primary exression)

  原始表達式是表達式的最小單位——它不再包含其他表達式。javascript中的原始表達式包括this關鍵字、標識符引用、字面量引用、數組初始化、對象初始化和分組表達式

PrimaryExpression : 
this 
Identifier 
Literal 
ArrayLiteral 
ObjectLiteral 
( Expression )

this關鍵字和標識符

this;//返回當前對象
i;//返回變數i的值
sum;//返回變數sum的值

字面量

  字面量(literal),又翻譯成直接量,就是程式中直接使用的數據值

 Literal ::
   NullLiteral
   BooleanLiteral
   NumericLiteral
   StringLiteral 
   RegularExpressionLiteral
null;
undefined;
true;
false;
1;
'abc';
/pattern/;

數組和對象初始化

  數組初始化和對象初始化實際上是一個以字面量的方式描述的初始化的過程。這兩個初始化表達式有時稱做"對象直接量"和"數組直接量"

[];
[1,2,3];
{};
{a:1};

分組表達式

  分組表達式實際上就是括弧,用於重寫運算符的優先順序

 

複雜表達式(MemberExpression)

  複雜表達式是由原始表達式和操作符(operator)組合而成,包括屬性訪問表達式、對象創建表達式和函數表達式

MemberExpression : 
MemberExpression [ Expression ] 
MemberExpression . IdentifierName 
new MemberExpression Arguments
FunctionExpression 

屬性訪問表達式

  屬性訪問表達式運算可以得到一個對象屬性或一個數組元素的值,javascript為屬性訪問定義了兩種語法

MemberExpression . IdentifierName 
MemberExpression [ Expression ] 

  第一種寫法是一個表達式後跟隨一個句點和標識符。表達式指定對象,標識符則指定需要訪問的屬性的名稱

  第二種寫法是使用方括弧,方括弧內是另外一個表達式(這種方法適用於對象和數組)。第二個表達式指定要訪問的屬性的名稱或代表要訪問數組元素的索引

var o = {x:1,y:{z:3}}; //對象字面量
var a = [o,4,[5,6]]; // 包含對象的數組字面量
o.x;//表達式o的x屬性
o.y.z;//表達式o.y的z屬性
o['x'];//對象o的x屬性
a[1];//表達式a中索引為1的元素

  不管使用哪種形式的屬性訪問表達式,在'.'和'['之前的表達式總是會首先計算

  如果計算結果是null或undefined,表達式會拋出一個類型錯誤異常,因為這兩個值都不能包含任意屬性

  如果計算結果不是對象,javascript會將其轉換為對象

  如果對象表達式後跟隨句點和標識符,則會查找由這個標識符指定的屬性值,並將其作為整個表達式的值返回

  如果對象表達式後跟隨一對方括弧,則會計算方括弧內的表達式的值並將其轉換為字元串

  不論哪種情況,如果命名的屬性不存在,那麼整個屬性訪問表達式的值就是undefined

對象創建表達式

  對象創建表達式創建一個對象並調用一個函數初始化新對象的屬性

new Object();
new Point(2,3);

  如果一個對象創建表達式不需要傳入任何參數給構造函數的話,那麼這對空圓括弧是可以省略的

new Object;

函數表達式

  函數表達式分為函數定義表達式和函數調用表達式

  函數定義表達式定義一個javascript函數,表達式的值是這個新定義的函數

  一個典型的函數定義表達式包含關鍵字function,跟隨其後的是一對圓括弧,括弧內是一個以逗號分割的列表,列表含有0個或多個標識符(參數名),然後再跟隨一個由花括弧包裹的javascript代碼段(函數體)

function square(x){
    return x*x;
}

  函數定義表達式同樣可以包含函數的名字,函數也可以通過函數語句來定義,而不是函數表達式

var square = function(x){return x*x;}

  函數調用表達式是一種調用或執行函數或方法的語法表示。如果這個表達式是一個屬性訪問表達式,那麼這個調用稱做方法調用

f(0);
Math.max(x,y,z);
a.sort();

 

參考資料

【1】ES5/表達式 https://www.w3.org/html/ig/zh/wiki/ES5/expressions
【2】《javascript權威指南(第6版)》第4章 表達式和運算符
【3】《javascript語言精粹(修訂版)》第2章 語法


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

-Advertisement-
Play Games
更多相關文章
  • ...
  • 第2天 棧和寄存器 多文件編程 筆者在私下和很多C語言的愛好者和初學者交流的過程中發現,大家已經能夠使用C語言做出來很出色的程式了。但是這些出色的程式中的一部分竟然只有一個源文件。所以,筆者決定要介紹一下如何使用多個源文件進行編程。不得不說,多文件編程有非常多的優勢。比如在維護上非常方便,同時也給多 ...
  • 上一篇文章主要是講了mybatis-generator-core-1.3.2.jar的使用,這一篇我要介紹的是,修改jar包代碼,實現生成自定義模板。 1.我們從這裡可以下載mybatis-generator-core-1.3.2.jar項目源碼 http://maven.outofmemory.c ...
  • 看了網上一些文章,做了點總結,順便再加點自己的東西,簡單的說下。 1.利用瀏覽器的304緩存,但是304叫協商緩存,還是需要與伺服器通信一次 2.強制使用瀏覽器使用本地緩存(cache-control/expires),但是問題來了,不讓瀏覽器發資源請求,資源怎麼更新。 3.使用版本號,類似於a.c ...
  • 一、 java的基本程式設計結構 (一) java共有8種基本類型:4種整型,2種浮點類型,1種char,1種boolean。 1) 4種整型:byte(1)、short(2)、int(4)、long(8)。 2) int最常用,byte和short常用在底層的文件處理或者需要控制占用存儲空間量的大 ...
  • 每次回到宿舍想看部電影才發現很長時間沒有去bt站淘種子了, 然而天天去站上找適合自己類型的電影又是一件費時又費力的事兒, 所以周末花時間寫了一個可配置的爬子, 能夠根據不同人的不同需求去自動下載種子文件, 並且能夠避免不同分類中的重覆電影 後期還會加入下載隊列的功能, 在檢測宿舍無人用網的時候開啟b ...
  • 前幾天在學習js的時候,碰到了這樣一道面試題,要求計算出給你一個隨機亂敲的一個字元串,要求在其中找出那個字元出現的次數最多,以及出現的個數。 這你有兩種方案,請大家仔細閱讀,有可能在你將來的面試中會碰到。 一: 二: 謝!轉:http://www.cnblogs.com/heyongjun1997/ ...
  • DCI in C++ 本文講解的C++的DCI編程框架,目前作為 "ccinfra" 的一個組件提供,可訪問 "https://github.com/MagicBowen/ccinfra" 獲取具體源碼。ccinfra中的DCI框架原創者是袁英傑先生(Thoughtworks),我們在兩個大型電信系 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...