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