亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

003-讀書筆記-JavaScript高級程序設(shè)計 基本概念(上)

shmily / 2382人閱讀

摘要:尚未聲明的變量,只能執(zhí)行一項操作,就是檢測該變量的數(shù)據(jù)類型。表示的是空對象指針,因此,使用操作符得到的結(jié)果是。

這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。

1.語法 1-1 區(qū)分大小寫

ECMAScript 中的一切都是區(qū)分大小寫的。

testTest 首字母不同,那么它們就不相同

typeoftypeOf 中間有個字母大小寫不同,那么它們也不相同

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é)尾手動增加分號的好處:

提高代碼的性能(解析器不需要推測在哪里需要插入分號)

避免一些不必要的錯誤(如代碼壓縮時出錯)

推薦語句的結(jié)尾使用分號

2.關(guān)鍵字和保留字

關(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

關(guān)鍵字和保留字不能用作標(biāo)識符

3.變量

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

由于聲明為初始化和未聲明的變量,通過 typeof 操作符得到的結(jié)果相同,因此在變量初始的時候,一般給其賦初始值,這樣,在使用 typeof 操作符的時候,就能判斷該變量是不是未聲明的變量。

4-3 Null 類型

Null 類型中只有一個值:null。null 表示的是空對象指針,因此,使用 typeof 操作符得到的結(jié)果是 object。

var arg = null;
console.log(arg); // null

如果定義的變量,將來用來保存對象,那么就在定義的時候,初始化為 null

var obj = null; // 保存對象的引用

undefined 派生自 null,因此,在相等測試中返回 true。

console.log(null == undefined); // true
4-4 Boolean 類型

Boolean 類型中有兩個值:truefalse。

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) // false
4-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

相關(guān)文章

  • 004-讀書筆記-JavaScript高級程序設(shè)計 基本概念(下)

    摘要:操作符,會將數(shù)值改變正數(shù)變成負(fù)數(shù)負(fù)數(shù)變成正數(shù)。同時,也說明了,使用兩個邏輯非操作符和的操作結(jié)果相同。操作符得到的是余數(shù)。不相等操作符有兩種。 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。 1.操作符 1-1 一元操作符 遞增和遞減操作符 遞增和遞減操作符有兩個 ++ 和 --。一元操作符使用的時候,可以前置也可以后置。由于兩個操作方式類似,先只說明 ...

    nevermind 評論0 收藏0
  • 003-讀書筆記-Vue官網(wǎng) 計算屬性與監(jiān)聽器

    摘要:監(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)...

    dadong 評論0 收藏0
  • JavaScript高級程序設(shè)計讀書筆記

    摘要:為了每個對象都能通過來檢測,需要以或者的形式來調(diào)用,傳遞要檢查的對象作為第一個參數(shù),稱為。對象都是動態(tài)的,這就意味著每次訪問對象,都會運行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 1.理解參數(shù) 1.1 可以向函數(shù)中傳遞任意數(shù)量的參數(shù),并且可以通過arguments對象來訪問這些參數(shù)。 1.2 arguments對象只是類似數(shù)組,它通過length來確定傳進(jìn)來...

    dayday_up 評論0 收藏0
  • JavaScript高級程序設(shè)計》(第3版)讀書筆記 第4章 變量、作用域和內(nèi)存問題

    摘要:具體說就是執(zhí)行流進(jìn)入下列任何一個語句時,作用域鏈就會得到加長語句的塊。如果局部環(huán)境中存在著同名的標(biāo)識符,就不會使用位于父環(huán)境中的標(biāo)識符訪問局部變量要比訪問全局變量更快,因為不用向上搜索作用域鏈。 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...

    lidashuang 評論0 收藏0
  • Javascript 設(shè)計模式讀書筆記(二)——封裝,簡單的創(chuàng)建對象模式

    摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計構(gòu)造函數(shù)時,需要進(jìn)行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個只有一份,直接通過類對象進(jìn)行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險一金也好我實在是弄不清楚,于是我就會在網(wǎng)上的一些稅后收入計算器上進(jìn)行計算,只需要填寫一些基本信息,比如稅前收入,所...

    lentrue 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<