前端--關於javascript基礎概述

来源:http://www.cnblogs.com/jinjilin/archive/2016/01/10/5109175.html
-Advertisement-
Play Games

首先javascript不是瀏覽器的附屬品,只能說它大多數的運行環境是在瀏覽器中的,但又不僅僅局限於瀏覽器中。它是一門真正的程式設計語言,在這方面它和java、c、c++、c#是等同的,只不過它不直接和操作系統打交道,這也是它相比於其他語言有些特殊和看似簡單的地方。這種問題的根源在於它的翻譯器,.....


  首先javascript不是瀏覽器的附屬品,只能說它大多數的運行環境是在瀏覽器中的,但又不僅僅局限於瀏覽器中。它是一門真正的程式設計語言,在這方面它和java、c、c++、c#是等同的,只不過它不直接和操作系統打交道,這也是它相比於其他語言有些特殊和看似簡單的地方。這種問題的根源在於它的翻譯器,因為一個語言的特性怎麼樣全在於它的編譯器或者解釋器怎麼樣,用字元書寫的符合各種語法規則的字元串都是翻譯器內在要求的外在表現。單純的js解釋器的特點就是它自己本身的能力有點小以至於除了只能僅僅是運行一遍源文件外產生不了任何副作用和輸出,像ajax調用網路通信、動態改變樣式、動態改變標簽等這些都不是js解釋器本身自己去做到的,而是js解釋器通過調用與瀏覽器之間的一個中間層來完成的。所以單純的純粹的js解釋器的存在似乎沒有什麼意義,它總是要面向一個宿主環境才有實際作用,它總是要運行在一個比操作系統更高級的平臺中,正因為如此,javascript才說是具有跨平臺性的。

  有的地方講到javascript由三部分組成:ECMAScript、DOM、BOM。個人認為這麼劃分是有失偏頗的,這樣劃分組成部分就把js完全限制在了瀏覽器中,感覺js就是瀏覽器的一部分並只能是瀏覽器的一部分,所以要先弄清楚javascript與ECMAScript、DOM、BOM之間的關係。ECMASsript、BOM、DOM這三者的性質是相同的,它們都是某一種規範,一種標準。ECMAScript規定了變數、表達式、語句、函數、對象等語法規則和特性,javascript則是對這些規則的實現。DOM和BOM就是為了html文檔和瀏覽器的操作方便,把瀏覽器暴露給js解釋器的介面做了同一的規範,這些規範的表現就是在不同的瀏覽器中可以用js調用相同的API函數來做相同的事情。因此javascript作為一門獨立的程式設語言,ECMAScript已經涵蓋了它的語法規則和特性,這就已經足夠了。DOM和BOM並不屬於javascript,它倆只是在特定的宿主環境中對js的一種拓展補充。

   javascript的詞法結構比較簡單(詞法結構就是規定了標識符什麼樣,怎麼寫註釋,還有語句之間如何間隔),就是它是一門區分大小寫的語言;註釋用//兩道斜杠或者放在/*和 */之間;它的標識符要用數字、字母、下滑下、$符號組成,並且不能和保留字和關鍵字衝突,開頭不能是數字;空格、換行可以隨便加,程式都會做恰當的忽略,這樣可以寫自己喜歡的佈局。分號也是可選的,沒有的話在一行的結尾會自動添加分號。詞法結構只是告訴了我們js源程式文件應該怎麼寫,我們還應該知道都可以寫些什麼,而可以寫些什麼就要看程式設計語言能提供什麼。一般一個程式設計語言最基本的特征就是能夠提供多種數據類型,數據類型就是翻譯器和人的介面,根據機器的特點和人類的認知規律抽象出來的可以用於解決實際問題的類型概念,這樣也便於記憶體的管理並約束人的使用行為提高準確性。

    在js程式設計語言中數據類型可以分為兩類:原始類型和對象類型。原始類型中包括數字、字元、布爾、null、undefined,其中null和undefined的取值範圍就一個,那就是null和undefined這兩個關鍵字。對象類型一般情況下就是屬性的集合,但會有特殊的對象,比如說數組array和函數function。要使用這些類型就必須按照語法的要求用特定的記號把這些類型值表示出來,這種本身就表示或者返回某個類型值的寫法就叫表達式。在javascript中,一共有6中最基本的表達式,它們分別是:

  1. 原始表達式  這種表達式一般就是直接量或者變數等的表示
  2. 對象和數組初始化表達式  這也可以說是對象直接量和數組直接量,例如 {x:1,y:4}    [1,2,3]
  3. 函數定義表達式     同樣的這是算是函數直接量,語法就是function(參數){代碼段}
  4. 屬性訪問表達式     屬性訪問有兩種寫法一是點.加標識符的寫法 例如 obj.identifier;二是中括弧[]加裡面的表達式寫法,例如arr[1];j第一種只適用於對象,第二種適用於數組和對象。
  5. 調用表達式           這是一種特殊的表達式,只適用於函數或者方法,用來執行一塊代碼段並返回一個值。函數和方法本質上都是對象,只不過這個對象有一段附屬的相關聯的可執行代碼塊,並且這段代碼塊可以用對象加()運算符來執行。
  6. 對象創建表達式     這是通過構造函數創建對象的一種方法,這個表達式返回一個對象。

以上6中表達式可以通過和運算符結合形成更複雜的表達式,運算符可以操作一個或者多個表達式,並可以產生或者不產生副作用來返回一個值。在js中有50個左右的運算符,運算符一般是符號像+、-,但有些也是關鍵字,像instanceof、typeof等,這些運算符可以用於算數表達式、比較表達式、邏輯表達式、賦值表達式等。表達式總會產生一個返回值,而沒有返回值只產生副作用的寫法就是語句了。js中比較常見的語句也是有7種的,它們分別是:

  1. 表達式語句     這是一種特殊的語句,特殊在它是表達式的,它有個返回值,但它要是以分號結尾的。
  2. 複雜語句        這種語句寫法就是用一個大括弧{}把多個語句括起來
  3. 空語句           空語句就是什麼都沒有隻有個一分號。
  4. 聲明語句        這是用來聲明變數或者函數的
  5. 條件語句        存在決策點或者分支會用到
  6. 迴圈語句        代碼存在迴路的時候可以用到 迴圈語句有多種寫法 for、do/while、for/in等
  7. try/catch/finally  這些語句塊都要使用大括弧,是js的異常處理機制

最後通過對這些語句的構造就可以寫出正確的javascript程式了。


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

-Advertisement-
Play Games
更多相關文章
  • 圖像的亮度, 指的是圖像像素的強度, 黑色為最暗, 白色為最亮, 在ios中黑色用0來表示, 白色用1來表示.一個像素, 基本上是用RGB三個顏色分量來表示的. R(0-1), G(0-1),B(0-1). 亮度調整有多種計算方法,效果並不完全相同,在顏色的表示方法中, HSL(L)表示法就是...
  • 本文章轉接於:http://kofi1122.blog.51cto.com/2815761/521605Android中常常使用shape來定義控制項的一些顯示屬性,今天看了一些shape的使用,對shape有了大體的瞭解,稍作總結:先看下麵的代碼: solid:實心,就是填充的意思...
  • Charles —— 青花瓷 網路抓包工具 可以攔截 iPhone/Android 手機中 App 的 網路請求數據 使用 手機&電腦在同一個區域網 確保電腦能夠通過路由器訪問互聯網 電腦安裝 啟動 ,禁用 & 設置手機的網路代理 : 電腦的 ip : 8888 ...
  • 1、欄位上移修改點:兩個子類擁有相同的欄位做法:將該欄位移至父類2、函數上移修改點:有些函數,在各個子類中產生完全相同的效果做法:將該函數移至父類有一種特殊情況也需要這麼做:子類函數覆蓋了父類的,但是仍然做著相同的工作在此重構中你可能會遇到一種情況,就是你提煉的函數調用了子類有而父類沒有的函數,那麼...
  • 筆者主要給大家介紹8款.Net反編譯的利器:Reflector、ILspy、de4dot、JustDecompile、dnSpy、dotPeek、NETUnpack、DotNet Id、Simple Assembly Explorer其中DotNet Id是查殼工具、NETUnpack是脫殼工具、S...
  • 轉載自:http://blog.jobbole.com/89064/托管資源指的是.NET可以自動進行回收的資源,主要是指托管堆上分配的記憶體資源。托管資源的回收工作是不需要人工干預的,有.NET運行庫在合適調用垃圾回收器進行回收。非托管資源指的是.NET不知道如何回收的資源,最常見的一類非托管資源....
  • 下麵的介紹以karma能正常運行為前提,看karma系列文章:http://www.cnblogs.com/laixiangran/tag/Karma/目錄結構步驟安裝npm install angular --save-devnpm install angular-mocks --save-dev...
  • 下麵的介紹以karma能正常運行為前提,看karma系列文章:http://www.cnblogs.com/laixiangran/tag/Karma/目錄結構步驟安裝npm install karma-requirejs --save-devkarma.conf.js/*** * Created ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...