摘要:尚未聲明的變量,只能執(zhí)行一項操作,就是檢測該變量的數(shù)據(jù)類型。表示的是空對象指針,因此,使用操作符得到的結(jié)果是。
這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。
1.語法 1-1 區(qū)分大小寫ECMAScript 中的一切都是區(qū)分大小寫的。
test 和 Test 首字母不同,那么它們就不相同
typeof 和 typeOf 中間有個字母大小寫不同,那么它們也不相同
1-2 標(biāo)識符認(rèn)識標(biāo)識符
標(biāo)識符的作用:用于變量、函數(shù)名、屬性名、函數(shù)的參數(shù)
標(biāo)識符的規(guī)則:
1. 第一個字符必須是字母、下劃線(_)或美元符($) 2. 其他字符可以是字母、數(shù)字、下劃線或美元符 注: 1. ECMAScript 標(biāo)識符一般采用駝峰方式定義,即第一個字母小寫,剩下每個有意義的單詞首字母大寫(不是強制規(guī)定) 2. 不能使用關(guān)鍵字、保留字、true、false 和 null 作為標(biāo)識符(強制規(guī)定)
思考:可不可以使用 undefined 作為標(biāo)識符?
使用 var 來定義變量的時候不可以:
var undefined = 123; console.log(undefined); // undefined
使用 const 或 let 定義變量的時候可以:
let undefined = 123; console.log(undefined); // 123
結(jié)論:盡量不要使用 undefined 作為標(biāo)識符
1-3 注釋注釋的方式有兩種:
單行注釋
多行注釋
// 單行注釋
/** * 多行注釋 */1-4 嚴(yán)格模式
ECMAScript5 中引入了嚴(yán)格模式的概念。
嚴(yán)格模式的作用:為 JavaScript 定義一種不同的解析與執(zhí)行模型
嚴(yán)格模式的啟用:在文件中定義一個編譯指令 "use strict";
嚴(yán)格模式可以在文件中使用,也可以在函數(shù)中使用。如果要在整個文件中使用嚴(yán)格模式,就要在文件頂部添加編譯指令;如果要讓函數(shù)在嚴(yán)格模式下執(zhí)行,要在函數(shù)體中增加編譯指令。
"use strict"; // js文件中的其他代碼
function func(){ "use strict"; // 函數(shù)體 }1-5 語句
語句一般以分號結(jié)尾。
var num = 123;
結(jié)尾分號不是必須的,如果沒有分號,以解析器確定語句的結(jié)尾。
var num = 123
語句結(jié)尾手動增加分號的好處:
提高代碼的性能(解析器不需要推測在哪里需要插入分號)
避免一些不必要的錯誤(如代碼壓縮時出錯)
2.關(guān)鍵字和保留字推薦語句的結(jié)尾使用分號
關(guān)鍵字在 ECMA-262 中具有特定的用途,一般用于:
用于控制語句的開始或結(jié)束
用于執(zhí)行特定的操作等
ECMA-262 中的關(guān)鍵字如下:
列 | 列 | 列 | 列 | 列 | |
---|---|---|---|---|---|
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 |
ECMA-262 中的保留字沒有任何意義,但是以后有可能被用作關(guān)鍵字:
列 | 列 | 列 | 列 | 列 | |
---|---|---|---|---|---|
abstract | boolean | byte | char | class | |
const | debugger | double | enum | export | |
extends | final | float | goto | implements | |
import | int | interface | long | native | |
package | private | protected | public | short | |
static | super | synchronized | throws | transient | |
volatile | let | yield |
3.變量關(guān)鍵字和保留字不能用作標(biāo)識符
ECMAScript 中定義變量的方式,var 操作符后面跟上變量名,如 var num;。
ECMAScript 每個變量僅僅是一個用來保存值的占位符而已,ECMAScript 中的變量可以保存任意類型的值:
var num = 123; // 定義一個變量,初始值為數(shù)字 num = "123"; // 更改變量的值,這個時候數(shù)值類型為字符串
不建議修改變量所保存的值的類型
如果變量在聲明的時候,沒有指定初始值,會保存一個特殊的值 undefined。
var num; console.log(num); // undefined
一條語句可以定義多個變量,但是要使用逗號操作符分割:
var num = 123, str = "test", flag = true;
注意:嚴(yán)格模式下,不能定義名字為 eval 或 arguments 的變量,否則會報錯。
"use strict"; var arguments = 123; console.log(arguments);
會報出下面的錯誤:
SyntaxError: Unexpected eval or arguments in strict mode
分析:定義變量并結(jié)合作用域
在函數(shù)內(nèi)部通過 var 定義的變量,在函數(shù)外部不能訪問。
function func() { var name = "wang"; // 這是一個局部變量,當(dāng)函數(shù)執(zhí)行結(jié)束的時候,該變量會被銷毀 } func(); console.log(name); // ReferenceError: name is not defined
如果在函數(shù)內(nèi)部定義變量的時候不使用 var 關(guān)鍵字,那么就會默認(rèn)定義的是一個全局變量。
function func() { name = "wang"; } func(); console.log(name); // "wang"
上面的代碼和下面的代碼等價,因為發(fā)生了變量聲明提升:
var name; function func() { name = "wang"; } func(); console.log(name); // "wang"4.數(shù)據(jù)類型
ECMAScript 中有 5 種簡單的數(shù)據(jù)類型和 1 種復(fù)雜的數(shù)據(jù)類型。
簡單數(shù)據(jù)類型:Undefined Null Boolean Number String
復(fù)雜數(shù)據(jù)類型:Object
4-1 typeof 操作符typeof 是一個操作符,不是一個函數(shù),雖然在判斷數(shù)據(jù)類型的時候可以寫成 typeof(123),但是括號不是必須的。
typeof 123 typeof(123)
使用 typeof 操作符,返回值是下面值中的一個:
undefined : 值未定義
var arg1; var arg2 = undefined; var arg3 = void 0;
boolean : 值是布爾值
var arg1 = true; var arg2 = false;
string : 值是字符串
var arg1 = ""; var arg2 = "false";
number : 值是數(shù)值
var arg1 = 123;
object : 值是對象或 null
var arg1 = new Object(); var arg2 = null;
function : 值是函數(shù)
function func() {} console.log(typeof func); // function
注意:typeof 操作符后面的內(nèi)容可以是變量,也可以是字面量。
var str = "test"; console.log(typeof str); // 變量 console.log(typeof "test"); // 字面量4-2 Undefined 類型
Undefined 類型中只有一個值:undefined。Undefined 類型存在的作用就是比較。無論什么情況下,都沒有必要把一個變量的值,顯示指定為 undefined。
變量在聲明的時候沒有初始化,那么默認(rèn)該變量的值就是 undefined。
var arg; console.log(arg === undefined); // true
尚未聲明的變量,只能執(zhí)行一項操作,就是檢測該變量的數(shù)據(jù)類型。
console.log(typeof name); // undefined
4-3 Null 類型由于聲明為初始化和未聲明的變量,通過 typeof 操作符得到的結(jié)果相同,因此在變量初始的時候,一般給其賦初始值,這樣,在使用 typeof 操作符的時候,就能判斷該變量是不是未聲明的變量。
Null 類型中只有一個值:null。null 表示的是空對象指針,因此,使用 typeof 操作符得到的結(jié)果是 object。
var arg = null; console.log(arg); // null
如果定義的變量,將來用來保存對象,那么就在定義的時候,初始化為 null。
var obj = null; // 保存對象的引用
undefined 派生自 null,因此,在相等測試中返回 true。
console.log(null == undefined); // true4-4 Boolean 類型
Boolean 類型中有兩個值:true 和 false。
Boolean 可以將其他數(shù)據(jù)類型轉(zhuǎn)成 Boolean 類型,轉(zhuǎn)換規(guī)則如下:
數(shù)據(jù)類型 | true | false |
---|---|---|
Boolean | true | false |
String | 任意非空字符串 | ""(空字符串) |
Number | 任意非零數(shù)字 | 0和NaN |
Object | 任意對象 | null |
Undefined | 不適用 | undefined |
使用方式:
Boolean("string") // true
在流程控制語句中,會自動執(zhí)行 Boolean 進(jìn)行轉(zhuǎn)換:
var str = "test"; if(str){ // 相當(dāng)胡 if(Boolean(str)){ console.log(123) }4-5 Number 類型
Number 類型使用 IEEE754 來表示整數(shù)和浮點數(shù)。
認(rèn)識不同的進(jìn)制:
十進(jìn)制:0-9表示,逢10進(jìn)1
八進(jìn)制:0-7表示,逢8進(jìn)1
十六進(jìn)制:0-9和A-F表示,逢16進(jìn)1
var num1 = 12; // 十進(jìn)制 var num2 = 014; // 八進(jìn)制,以0開頭 var num3 = 0x12; // 十六進(jìn)制,以0x開頭
無效的八進(jìn)制會自動解析成十進(jìn)制:
var num = 029; // 由于八進(jìn)制中沒有9,會自動解析成十進(jìn)制的29
在嚴(yán)格模式下定義八進(jìn)制的數(shù)字會報錯:
"use strict"; var num = 017; // SyntaxError: Octal literals are not allowed in strict mode.
浮點數(shù)的組成:存在小數(shù)點,小數(shù)點后面存在數(shù)字。
var num1 = 0.1; // 浮點數(shù) var num2 = .2; // 雖然小數(shù)點之前可以沒有數(shù)字,但是不推薦這種寫法
浮點數(shù)占用的內(nèi)存是整數(shù)的兩倍,因此,ECMAScript 會把小數(shù)點后面沒有數(shù)字或數(shù)字為0的浮點數(shù)轉(zhuǎn)成整數(shù)來節(jié)約內(nèi)存。
var num1 = 1.; // 解析成 1 var num2 = 1.0; // 解析成 1
可以用科學(xué)計數(shù)法表示很大的值或者很小的值:
var num1 = 3.123e10; // 可以使用e,也可以使用E var num2 = 3.123e-10; // 表示小數(shù)
ECMAScript 能夠表示的最大值 Number.MAX_VALUE 和最小值 Number.MIN_VALUE??梢酝ㄟ^ isFinite() 方法判斷數(shù)值是否在 ECMAScript 能夠表示的數(shù)值范圍之內(nèi)。
console.log(isFinite(123)); // true
超出這個可表示的范圍的值,就是正無窮(Number.POSITIVE_INFINITY)和負(fù)無窮(Number.NEGATIVE_INFINITY)了。無窮大(Infinity)是不能參與運算的值,因此,如果有一個值的結(jié)果是無窮大,那么計算得到的值仍是無窮大。
console.log(Number.POSITIVE_INFINITY + 1) // Infinity
NaN 是一個比較特殊的值,這個數(shù)值用來表示,本來應(yīng)該返回數(shù)字的值,而最終的結(jié)果沒有返回數(shù)值。
2/0 // NaN
NaN 和任何數(shù)值進(jìn)行運算,得到的結(jié)果都是 NaN。
NaN + 1 // NaN
需要注意的是 NaN 和任何值都不相等,包括和自己本身。
console.log(NaN == NaN); // false console.log(NaN === NaN); // false
可以使用 isNaN 函數(shù)來判斷一個數(shù)是否不是數(shù)字,規(guī)則:如果參數(shù)能轉(zhuǎn)成數(shù)字,返回 false;如果參數(shù)不能轉(zhuǎn)成數(shù)字,返回 true。
isNaN(NaN) // true isNaN(true) // false4-6 數(shù)值轉(zhuǎn)換
把非數(shù)值轉(zhuǎn)成數(shù)值,有三個函數(shù)可以使用:
Number() : 將任意數(shù)值類型轉(zhuǎn)成數(shù)字
parseInt() : 將字符串轉(zhuǎn)成整數(shù)
parseFloat() : 將字符串轉(zhuǎn)成浮點數(shù)
Number() 方法
1.布爾類型:
Number(true) // 1 Number(false) // 0
2.數(shù)值類型: 原樣輸出
Number(12) // 12 Number(12.3) // 12.3
3.Null類類型:
Number(null) // 0
4.字符串:
Number("123") // 123,數(shù)字會轉(zhuǎn)成對應(yīng)的十進(jìn)制的值 Number("+123") // 123 Number("-123") // -123 Number("123.12") // 123.12 Number("") // 0,空字符串結(jié)果為0 Number("0xf") // 十六進(jìn)制對應(yīng)的十進(jìn)制 // 其余字符串轉(zhuǎn)成 NaN
使用一元加操作符,得到的結(jié)果和 Number 函數(shù)的結(jié)果相同
+"" // 0
parseInt() 方法
該方法在轉(zhuǎn)換成數(shù)值類型的時候,會有下面的操作:
首先檢查字符串開頭的字符是否是 "+" "-" 空格 數(shù)字,如果不是,則轉(zhuǎn)成 NaN
如果是,則檢查到第一個不為數(shù)字的字符為止,中間的內(nèi)容轉(zhuǎn)成數(shù)字
parseInt("123") // 123 parseInt(" 12.012") // 12 parseInt("a12") // NaN
該方法可以指定第二個參數(shù),表示第一個參數(shù)是哪種進(jìn)制的數(shù)值字符串:
parseInt("12", 8) // 10,12是八進(jìn)制值,轉(zhuǎn)成十進(jìn)制就是10
parseFloat() 方法
該方法在轉(zhuǎn)換成數(shù)值類型的時候,會有下面的操作:
首先檢查字符串開頭的字符是否是 "+" "-" 空格 數(shù)字 小數(shù)點,如果不是,則轉(zhuǎn)成 NaN
如果是,則檢查到第一個不為數(shù)字或小數(shù)點的字符為止,中間的內(nèi)容轉(zhuǎn)成數(shù)字
注意:如果字符串以小數(shù)點開頭,那么到第二個小數(shù)點的位置為止,中間的值作為浮點數(shù)
parseFloat(".12") // 0.12 parseFloat(".12.") // 0.12 parseFloat("+.12") // 0.12 parseFloat("a.12") // NaN
這個方法沒有第二個參數(shù)。
4-7 String 類型String 類型用于表示由零個或多個16位 Unicode 字符組成的字符序列,即字符串。字符串可以由引號(單引號或雙引號都可以)括起來表示。
"這是一個由單引號括起來的字符串" "這是一個由雙引號括起來的字符串"
轉(zhuǎn)義字符:
字面量 | 含義 |
---|---|
換行 | |
制表符 | |
空格 | |
回車 | |
斜杠 | |
" | 單引號 |
" | 雙引號 |
xnn | 以十六進(jìn)制代碼nn表示一個字符,如x41表示"A" |
unnnn | 以十六進(jìn)制代碼表示一個 Unicode 字符 |
字符串的特點:
字符串一旦創(chuàng)建,值就不能改變。如果要改變,需要重新開辟內(nèi)存,創(chuàng)建字符串,然后更新變量的指向。
轉(zhuǎn)成字符串:
除了 null 和 undefined,每個數(shù)據(jù)類型都有 toString,因此,可以使用 toString 方法轉(zhuǎn)成字符串。
123..toString() // "123",第一個點會被解析成小數(shù)點,第二個才是調(diào)用方法的操作符 (123).toString() // "123"
toString 的第二個參數(shù)用來指定轉(zhuǎn)成數(shù)字的基數(shù)。
12..toString(2) // 轉(zhuǎn)成二進(jìn)制
如果對 null 和 undefined 使用 toString 方法會報錯:
undefined.toString() // TypeError: Cannot read property "toString" of undefined null.toString() // TypeError: Cannot read property "toString" of null
一種更加強大的轉(zhuǎn)換成字符串的方法 String,可以接收 null 或 undefined,作為參數(shù);同時也可以接收其他數(shù)據(jù)類型作為參數(shù)。
console.log(String(null)); // null console.log(String(undefined)); // undefined
一種更簡單的轉(zhuǎn)成字符串的方式是,將數(shù)值類型與空字符串相加:
123 + "" // "123" null + "" // "null"4-8 Object 類型
創(chuàng)建 Object 實例的方式,可以通過構(gòu)造函數(shù)的形式創(chuàng)建:
var obj = new Object();
如果構(gòu)造函數(shù)中沒有傳遞參數(shù),那么可以省略括號:
var obj = new Object; // 這種方式不推薦
每個 Object 實例都有下面的屬性和方法:
Constructor : 構(gòu)造函數(shù),用于創(chuàng)建對象的函數(shù)
hasOwnProperty(propertyName) : 檢查實例中是否包含某個屬性,不是實例原型上的屬性
isPrototypeOf(object) : 檢查傳入的對象是否是另一個對象的原型
propertyIsEnumerable(propertyName) : 屬性能否使用 for-in 語句進(jìn)行遍歷
toLocalString : 轉(zhuǎn)成與本地運行環(huán)境相匹配的字符串
toString : 返回對象的字符串表示
valueOf : 返回對象的字符串、數(shù)值或布爾值的表示
這些內(nèi)容作為記憶,在后續(xù)的章節(jié)會有對這些內(nèi)容的詳細(xì)解釋。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91991.html
摘要:操作符,會將數(shù)值改變正數(shù)變成負(fù)數(shù)負(fù)數(shù)變成正數(shù)。同時,也說明了,使用兩個邏輯非操作符和的操作結(jié)果相同。操作符得到的是余數(shù)。不相等操作符有兩種。 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。 1.操作符 1-1 一元操作符 遞增和遞減操作符 遞增和遞減操作符有兩個 ++ 和 --。一元操作符使用的時候,可以前置也可以后置。由于兩個操作方式類似,先只說明 ...
摘要:監(jiān)聽器監(jiān)聽器的作用就是監(jiān)視實例中的內(nèi)容變化的。需要監(jiān)聽哪個屬性,就把屬性的名字寫在監(jiān)聽器中??偨Y(jié)監(jiān)聽器的一般寫法監(jiān)聽器的完整寫法,指定兩個參數(shù)參考內(nèi)容計算屬性和觀察者 1.計算屬性 1-1 計算屬性概述 計算屬性也是 Vue 實例的屬性,和 data 方法中返回的對象中的屬性是等同的存在。通常來說,計算屬性可以簡單理解: 計算屬性其實就是 Vue 實例的一個屬性 計算屬性一般依賴傳統(tǒng)...
摘要:為了每個對象都能通過來檢測,需要以或者的形式來調(diào)用,傳遞要檢查的對象作為第一個參數(shù),稱為。對象都是動態(tài)的,這就意味著每次訪問對象,都會運行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 1.理解參數(shù) 1.1 可以向函數(shù)中傳遞任意數(shù)量的參數(shù),并且可以通過arguments對象來訪問這些參數(shù)。 1.2 arguments對象只是類似數(shù)組,它通過length來確定傳進(jìn)來...
摘要:具體說就是執(zhí)行流進(jìn)入下列任何一個語句時,作用域鏈就會得到加長語句的塊。如果局部環(huán)境中存在著同名的標(biāo)識符,就不會使用位于父環(huán)境中的標(biāo)識符訪問局部變量要比訪問全局變量更快,因為不用向上搜索作用域鏈。 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...
摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計構(gòu)造函數(shù)時,需要進(jìn)行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個只有一份,直接通過類對象進(jìn)行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險一金也好我實在是弄不清楚,于是我就會在網(wǎng)上的一些稅后收入計算器上進(jìn)行計算,只需要填寫一些基本信息,比如稅前收入,所...
閱讀 4996·2021-09-22 14:57
閱讀 622·2019-08-30 15:56
閱讀 2718·2019-08-30 15:53
閱讀 2295·2019-08-29 14:15
閱讀 1738·2019-08-28 17:54
閱讀 610·2019-08-26 13:37
閱讀 3540·2019-08-26 10:57
閱讀 1106·2019-08-26 10:32