1. 程式人生 > >《JavaScript高級程序設計》讀書筆記(三)基本概念第一小節

《JavaScript高級程序設計》讀書筆記(三)基本概念第一小節

但是 不同的 volatil rom 語法 first 括號 stat -m

內容
---語法 本小節
---數據類型 本小節 undefined,null,Boolean
---流程控制語句
---理解函數

任何語言的核心都必然會描述這門語言最基本的工作原理。
而描述的內容通常都要涉及這門語言的語法、操作符、數據類型、內置功能等,
用於構建復雜解決方案的基本概念

語法
---ECMAScript語法大量借鑒C及類C語言(如java,Perl)

區分大小寫
---一切(變量、函數名、操作符)都區分大小寫

標識符
---變量、函數、屬性的名字或者參數
---第一個字符必須是,字母、下劃線(——)或者一個美元符號($)
---其他字符可以是字母、下劃線、美元符號、數字。

標識符采用駝峰大小寫格式
---firstSecond
---myCar
---doSomethingImportant

--不能把關鍵字、保留字、true、false、null用作標識符。

註釋
//單行註釋
/* */塊級註釋
/*
* 慣用寫法
*/

嚴格模式
--es5引入了嚴格模式(strict mode)的概念
--為JavaScript定義了一種不同的解析和執行模型
--在嚴格模式下 es3的一些不確定行為得到處理,不安全操作也會跑錯


要啟用嚴格模式 可在頂部添加:

"use strict";

--編譯指示(pragma)

也可在函數內部啟用嚴格模式:
function doSomething() {
"use strict";
//函數體
}

--嚴格模式下,JavaScript執行的結果會有很大不同

語句
--以分號(;)結尾,如果省略則由瀏覽器確定語句的結尾(不推薦)
----避免不完整輸入、利於代碼壓縮、增加性能
var sum = a + b //即使沒有分號也是有效的語句--不推薦
var diff = a - b; //有效的語句--推薦


--不要省略代碼塊 即使只有一條語句 降低修改代碼出錯幾率
if(test)
alert(test); //有效但容易出錯、不要使用
if(test) {
alert(test); //推薦使用
}


關鍵字和保留字
--關鍵字,用於表示控制語句的開始和結束,或者用於執行特定操作
--保留字,目前沒用,但是可能將來被用作關鍵字

ECMAScript的全部關鍵字(帶*號的是es5新增的關鍵字)
break, do, instanceof, typeof, case, else,
new, var, catch, finally, return, void,
continue, for, switch, while, debugger*,
function, this, with, default, if, throw,
delete, in, try

es3全部保留字
abstract, enum, int, short, boolean, export, interface, static,
byte, extends, long, super, char, final, native, synchronized,
class, float, package, throws, const, goto, private, transient,
debugger, implements, protected, volatile, double, import, public

在es5把非嚴格模式下運行時的保留字縮減為:
class, enum, extends, super, const, export, import
在嚴格模式下,還對以下保留字施加了限制:
implements, package, public, interface, private, static, let, protected, yield

--let和yield(異步編程有關)是es5 保留字
--使用關鍵字會導致 ,identifier expected(預期標識符),錯誤
--使用保留字,可能不會出錯,具體看特定的引擎
--es5中 可以把關鍵字和保留字用於對象的屬性名,不建議
--es5對eval和arguments也施加了限制,在嚴格模式下不能作為標識符和屬性名

變量
--ECMAScript的變量是松散類型,即可以用來保存任何類型的數據
--變量僅僅是一個用於保存值的占位符
--定義變量時要用var操作符(關鍵字)

var message;

--定義但是未初始化會保存一個特殊值----undefined

--定義並初始化

var message = "hi";
message = 100; //有效的是不推薦,修改變量的保存值類型

--使用var操作符定義的變量將成為定義該變量作用域中的局部變量
--在函數中使用var定義變量,在函數退出後會被銷毀

function test() {
var message = "hi"; //局部變量
}
test();
alert(message); //錯誤!

--未經聲明的變量賦值時,省略var操作符,會聲明全局變量
--不推薦,在局部作用域中定義全局變量很難維護
--嚴格模式下,未經聲明的變量賦值會導致拋出ReferenceError錯誤

--可以使用一條語句定義多個變量,初始化可選,用逗號隔開

var message = "hi",
found,
age = 29;

--使用換行和縮進增加可讀性
--嚴格模式下,不能定義名字是eval和arguments 的變量

數據類型
--ECMAScript中有5種簡單數據類型(基本數據類型)和一種復雜數據類型
----基本數據類型:undefined、null、Boolean、Number、String
----復雜數據類型:Object,本質上是由一組無序的名值對組成的
--ECMAScript不支持創建自定義類型的機制
--因為ECMAScript數據類型是動態性的,也沒有再定義其他數據類型的必要了


typeof操作符
--因為ECMASript是松散類型,因此需要一種手段來檢測給定變量的數據類型-typeof

一個值使用typeof操作符可能返回:
--undefined,值未定義
--boolean, 布爾值
--string, 字符串
--number, 數值
--object, 對象或者null
--function, 函數

--typeof是操作符不是函數()括號不是必須的
--typeof null//object,是因為特殊值null被認為是一個空的對象引用
--safari5之前,chrome7之前版本對正則表達式調用typeof 返回function 而其他瀏覽器返回object
--從技術角度,函數在ecmascript中是對象,不是數據類型,
然而函數也有特殊屬性,所以用過typeof可以區分函數和其他對象

undefined類型
--只有一個值 特殊的undefined,在使用var聲明變量是未初始化時這個變量值就是undefined
--沒必要初始化為undefined,因為未初始化值默認為undefined

--聲明未定義和未聲明不同

var message;
alert(message); ‘undefined‘
alert(age); 錯誤

--對聲明未定義和未聲明使用typeof,返回的都是undefined
--所以盡量顯示的初始化變量,這樣我們時候typeof 返回undefined時,就知道是未聲明


null類型
--第二個只有一個值(null)的數據類型
--邏輯上表示一個空的對象指針,所以 typeof null => object
--定義變量準備用於保存對象,那麽初始化為null最好不過

if(car != null) {
//對car對象的某些操作
}

--實際上,undefined值派生自null值,所以

null == undefined //true

boolean類型

--使用最多的類型之一,兩個值,true和false。
--區分大小寫
--雖然boolean類型字面值只有兩個,但是ECMAScript中所有類型都有與之等價的值
--可調用Boolean()轉型函數,將一個其他類型的值轉化其對應的boolean值
--轉型規則

數據類型 true false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數字值(包括無窮大) 0和NAN(不是數值)
Object 任何對象 null
undefined n/a(不適用) undefined

--判斷語句中會自動執行Boolean轉換

《JavaScript高級程序設計》讀書筆記(三)基本概念第一小節