摘要:操作符,會將數(shù)值改變正數(shù)變成負(fù)數(shù)負(fù)數(shù)變成正數(shù)。同時,也說明了,使用兩個邏輯非操作符和的操作結(jié)果相同。操作符得到的是余數(shù)。不相等操作符有兩種。
這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。
1.操作符 1-1 一元操作符遞增和遞減操作符
遞增和遞減操作符有兩個 ++ 和 --。一元操作符使用的時候,可以前置也可以后置。由于兩個操作方式類似,先只說明 ++,-- 類比就可以了。
使用 ++ 操作符,相當(dāng)于使用了一個簡化的語句:
var age = 27; age++; // 這里相當(dāng)于 age = age + 1; 的簡化 console.log(age); // 28
前置 ++,先加后用;后置 ++,先用后加
前置操作:先加后用
var age = 27; var num = ++age; // 相當(dāng)于 age = age + 1; var num = age; 的簡寫 console.log(age, num); // 28 28
后置操作:先用后加
var age = 27; var num = age++; // 相當(dāng)于 var num = age; age = age + 1; 的簡寫 console.log(age, num); // 28 27
思考,下面的代碼是什么樣的簡寫?
var num1 = 12; var num2 = 10; var num3 = num1++ + ++num2; console.log(num1, num2, num3); // 13 11 23
全寫形式如下:
var num1 = 12; var num2 = 10; // ============ num2 = num2 + 1; var num3 = num1 + num2; num1 = num1 + 1; // ============ console.log(num1, num2, num3); // 13 11 23
一元加和減操作符
一元加和減操作符包括 + 和 -。
+ 放在數(shù)值前面,不會修改數(shù)值的內(nèi)容。
var num = 123; num = +num; // 123
+ 放在任意數(shù)據(jù)類型之前,都會發(fā)生數(shù)據(jù)類型轉(zhuǎn)換;轉(zhuǎn)換的結(jié)果和使用 Number 方法的結(jié)果相同。可以理解成 Number 方法的簡寫形式。
+true // 1 Number(true) // 1
- 操作符,會將數(shù)值改變:正數(shù)變成負(fù)數(shù);負(fù)數(shù)變成正數(shù)。
var num = 123; num = -num; // -1231-2 布爾操作符
邏輯非(!):
邏輯非就是取反操作,操作結(jié)果如下:
操作數(shù) | 結(jié)果
-|-
true | false
false | true
邏輯非操作符后面可以跟任意數(shù)據(jù)類型的數(shù)據(jù),操作結(jié)果就是 !Boolean()。也就是通過 Boolean() 函數(shù)得到的布爾類型值的取反操作。
!NaN // true !Boolean(NaN) // true
同時,也說明了,使用兩個邏輯非操作符和 Boolean() 的操作結(jié)果相同。
!!NaN // false Boolean(NaN) // false
邏輯與(&&):
第一個操作數(shù) | 第二個操作數(shù) | 結(jié)果
-|-|-
true | true | true
true | false | false
false | true | false
false | false | false
邏輯與操作符也被稱為短路操作符,也就是,第一個操作數(shù)的結(jié)果為 false,那么就不會執(zhí)行第二個操作數(shù)了。
var num = (3>2) && 5; // 第一個操作數(shù)的結(jié)果是true,因此num的結(jié)果為第二個操作數(shù)的結(jié)果 5 console.log(num); // 5
var num = (3<2) && 5; // 第一個操作數(shù)的結(jié)果是false,因此num的結(jié)果為第一個操作數(shù)的結(jié)果 false console.log(num); // false
邏輯或(||):
第一個操作數(shù) | 第二個操作數(shù) | 結(jié)果
-|-|-
true | true | true
true | false | true
false | true | true
false | false | false
邏輯或也是一種短路操作符,如果第一個操作數(shù)的結(jié)果為 true,那么就不會執(zhí)行第二個操作數(shù)了。
var num = (3>2) || 5; // 第一個操作數(shù)的結(jié)果是 true,最終的結(jié)果是第一個操作數(shù)的值 console.log(num); // true
var num = (3<2) || 5; // 第一個操作數(shù)的值是 false,最終結(jié)果是第二個操作數(shù)的值 console.log(num); // 51-3 乘性操作符
乘性操作符有三種:* / %。使用乘性操作符的時候,會首先通過 Number() 方法轉(zhuǎn)化操作數(shù),然后再做運(yùn)算。
/ 操作符得到的結(jié)果不像其他語言一樣只得到整數(shù),而是得到最終的結(jié)果。
console.log(2 / 3); // 0.6666666666666666 console.log(3 / 2); // 1.5 console.log(4 / 2); // 2
% 操作符得到的是余數(shù)。
console.log(3 % 2); // 1
通過 / 和 % 得到余數(shù)和結(jié)果。
function func(num1, num2) { return { res: ~~(num1 / num2), // ~~ 的作用是取整數(shù) yus: num1 % num2 } } var res = func(17, 3); console.log(`結(jié)果:${res.res},余數(shù):${res.yus}`); // 結(jié)果:5,余數(shù):21-4 加性操作符
加性操作符有兩個:+ -。
+ 操作符,在操作數(shù)不是數(shù)值的情況下,會先通過 String() 方法將操作數(shù)轉(zhuǎn)成字符串,然后字符串相加。
console.log("5" + "2"); // "52"
- 操作符,在操作數(shù)不是數(shù)值的情況下,會通過 Number() 方法將操作數(shù)轉(zhuǎn)成數(shù)值,然后操作。
console.log("5" - "2"); // 31-5 關(guān)系操作符
關(guān)系運(yùn)算符有四個:> >= < <=。比較的規(guī)則,一般是把操作數(shù)轉(zhuǎn)成數(shù)值,然后進(jìn)行比較。
var res1 = "3" < 2; // "3" 會轉(zhuǎn)成數(shù)值 3,然后比較
比較字符串,會比較字符串對應(yīng)位置上的字符編碼:
var res1 = "abc" < "aBc"; // false console.log("a : " + "a".charCodeAt(0)); // 97 console.log("b : " + "b".charCodeAt(0)); // 98 console.log("B : " + "B".charCodeAt(0)); // 66 console.log("c : " + "c".charCodeAt(0)); // 99
上面代碼中,b 的編碼大于 B 的編碼,因此為 false。
1-6 相等操作符相等操作符有兩種:== ===。不相等操作符有兩種 != !==。
== : 僅比較值是否相等
=== : 不僅比較值,還要比較數(shù)據(jù)類型
一些特殊情況:
表達(dá)式 | 值
-|-
null == undefined | true
"NaN" == NaN | false
5 == NaN | false
NaN == NaN | false
NaN != NaN | true
false == 0 | true
true == 1 | true
true == 2 | false
undefined == 0 | false
null == 0 | false
"5" == 5 | true
"5" === 5 | false
三目運(yùn)算符的語法:variable = boolean_expression ? true_value : false_value。其實是對 if-else 語句的簡寫:
if(boolean_expression) { // true_value } else { // false_value }
保存兩個數(shù)中的最大值:
var num1 = 3; var num2 = 4; var res = num1 > num2 ? num1 : num2; // 41-8 逗號操作符
逗號運(yùn)算符可以用于一條語句中執(zhí)行多個操作。
用于聲明多個變量:
var num1 = 1, num2 = 2, num3 = 3;
用于賦值,總是會把最后一個逗號后面的值賦值給變量:
var num = (1, 2, 3, 4, 5); // 5
可以用于 ++ 操作符的理解:
var num1 = 10; var num2 = 12; var res = 0; res = num1++ + ++num2; // 23
最后一句代碼可以通過逗號運(yùn)算符,理解成下面的形式:
num2 = num2 + 1, res = num1 + num2, num1 = num1 + 1;2.語句
由于語句在編程中經(jīng)常使用,更多的細(xì)節(jié),在實際使用的過程中會逐漸加深理解,因此,這里只記錄一下基本語法。
2-1 if語句單個條件的語法:
if (condition) { // ... } else { // ... }
多個條件的語法:
if (condition1) { // ... } else if (condition2) { // ... } else { // ... }2-2 do-while語句
語法如下:
do { // ... } while (expression);
循環(huán)至少會被執(zhí)行一次。
var i = 0; do { console.log("hi~~ " + i++); } while (i > 1); // hi~~ 02-3 while語句
語法如下:
while (expression) { // ... }
不滿足條件,循環(huán)不會執(zhí)行:
var i = 0; while (i > 1) { console.log("hi~~ " + i++); }2-4 for語句
語法如下:
for (initalization; expression; post-loop-expression) { // ... }
求出 1-100 的和。
var sum = 0; for (var i = 1; i <= 100; i++) { sum += i; } console.log("1 + ... + 100 = " + sum);2-5 for-in語句
for-in 語句是一種精準(zhǔn)的迭代語句,可以用來枚舉對象的屬性。
for (property in expression) { // ... }
例子如下:
for (var item in window) { // 循環(huán)BOM中window對象中的屬性 console.log(item); }
如果被迭代對象的屬性值是 null 或者 undefined,for-in 語句會報出錯誤,因此,應(yīng)該做容錯處理。
for (var item in window) { // 循環(huán)BOM中window對象中的屬性 if(item !== null && item !== undefined){ // 容錯處理 console.log(item); } }2-6 break和continue語句
break 和 continue 用來在循環(huán)中精準(zhǔn)控制代碼的執(zhí)行。
continue 是退出當(dāng)前循環(huán),繼續(xù)執(zhí)行下一個循環(huán)
breank 是退出整個循環(huán)
for (var i = 0; i < 10; i++) { if (i === 5) { break; // i 等于 5 的時候,退出當(dāng)前循環(huán) } console.log("i = " + i); }
上面代碼中,當(dāng) i 等于 5 的時候,循環(huán)就不再執(zhí)行了。
for (var i = 0; i < 10; i++) { if (i === 5) { continue; // 當(dāng) i 等于 5 的時候,退出當(dāng)前循環(huán),接著下一次循環(huán) } console.log("i = " + i); }
上面代碼中,當(dāng) i 等于 5 的時候,就不會輸出,然后接著執(zhí)行 i 等于 6 的情況。
2-7 switch語句語法如下:
switch (expression) { case value: // ... break; case value: // ... break; default: // ... break; }
其中需要說明的是,判斷的每一項是 expression 的值與 value 是否全等。
switch ("1") { case 1: console.log("相等"); break; default: console.log("全等"); break; } // "全等"3.函數(shù) 3-1 函數(shù)的組成
一個函數(shù)的組成由:關(guān)鍵字function、函數(shù)名、函數(shù)參數(shù)、函數(shù)體、返回值
function 函數(shù)名(參數(shù)1, 參數(shù)2, ..., 參數(shù)n) { 函數(shù)體 return 返回值; }
一個簡單的求兩數(shù)之和的函數(shù)。
function getSum(num1, num2) { return num1 + num2; } console.log("1 + 2 = " + getSum(1, 2));
3-2 函數(shù)的參數(shù)注意:不能把函數(shù)名和函數(shù)參數(shù)命名為 eval 或 arguments。
ECMAScript 中,傳遞函數(shù)的參數(shù)比較自由,可以不用和定義函數(shù)的參數(shù)保持一致。
function getSum(num1, num2) { return num1 + num2; } console.log(getSum()); // 不傳參數(shù) console.log(getSum(1)); // 傳一個參數(shù) console.log(getSum(1, 2)); // 傳兩個參數(shù) console.log(getSum(1, 2, 3)); // 傳三個參數(shù)
其實在函數(shù)的內(nèi)部,始終存在一個類似于數(shù)組的對象 arguments,通過這個對象,可以實現(xiàn)不同的個數(shù)參數(shù)的傳遞。
function getSum(num1, num2) { console.log(typeof arguments); for (var i = 0; i < arguments.length; i++) { console.log("arguments[" + i + "] = " + arguments[i]); } } getSum() getSum(1) getSum(1, 2) getSum(1, 2, 3)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92007.html
摘要:為了每個對象都能通過來檢測,需要以或者的形式來調(diào)用,傳遞要檢查的對象作為第一個參數(shù),稱為。對象都是動態(tài)的,這就意味著每次訪問對象,都會運(yùn)行一次查詢。是語言中立的用于訪問和操作和文檔。 一、第三章 基本概念: 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 ...
摘要:尚未聲明的變量,只能執(zhí)行一項操作,就是檢測該變量的數(shù)據(jù)類型。表示的是空對象指針,因此,使用操作符得到的結(jié)果是。 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第三章。 1.語法 1-1 區(qū)分大小寫 ECMAScript 中的一切都是區(qū)分大小寫的。 test 和 Test 首字母不同,那么它們就不相同 typeof 和 typeOf 中間有個字母大小寫不同...
摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計構(gòu)造函數(shù)時,需要進(jìn)行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個只有一份,直接通過類對象進(jìn)行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險一金也好我實在是弄不清楚,于是我就會在網(wǎng)上的一些稅后收入計算器上進(jìn)行計算,只需要填寫一些基本信息,比如稅前收入,所...
摘要:綁定綁定,使用,簡寫的形式是。綁定比較靈活,可以使用表達(dá)式字符串對象或數(shù)組。綁定字符串綁定字符串的時候只能綁定一個,不能綁定多個。 1.綁定Class 綁定Class,使用 v-bind:class,簡寫的形式是 :class。綁定Class比較靈活,可以使用表達(dá)式、字符串、對象或數(shù)組。 1-1 搭建結(jié)構(gòu) 首先,新建一些 class 樣式: .colorRed { colo...
閱讀 3564·2023-04-26 00:05
閱讀 954·2021-11-11 16:55
閱讀 3522·2021-09-26 09:46
閱讀 3517·2019-08-30 15:56
閱讀 909·2019-08-30 15:55
閱讀 2934·2019-08-30 15:53
閱讀 1940·2019-08-29 17:11
閱讀 814·2019-08-29 16:52