第 1 章 JavaScript簡介
npm install http-server -g
http-server
- JavaScript 的類型有數(shù)字可帽、字符串擦盾、布爾值、函數(shù)和對象系忙。還有 undefined 和 null 诵盼,以及數(shù)組、日期和正則表達式。
操作符
算數(shù)操作符 |
描述 |
+ |
加法 |
- |
減法 |
* |
乘法 |
/ |
除法 |
% |
取余 |
++ |
遞增 |
-- |
遞減 |
賦值操作符 |
描述 |
= |
賦值 |
+= |
加/賦值 (x += y) == (x = x + y) |
-= |
減/賦值 (x -= y) == (x = x - y) |
*= |
乘/賦值 (x *= y) == (x = x * y) |
/= |
除/賦值 (x /= y) == (x = x / y) |
%= |
取余/賦值 (x %= y) == (x = x % y) |
比較操作符 |
描述 |
== |
相等 |
=== |
全等 |
!= |
不等 |
> |
大于 |
>= |
大于等于 |
< |
小于 |
<= |
小于等于 |
位操作符 |
描述 |
& |
與 |
| |
或 |
~ |
非 |
^ |
異或 |
<< |
左移 |
>> |
右移 |
- typeof 操作符可以返回變量或表達式的類型
- JavaScript還支持 delete 操作符风宁,可以刪除對象里的屬性
數(shù)值類型 |
轉換成布爾值 |
undefined |
false |
null |
false |
布爾值 |
true是 true 洁墙,false是 false |
數(shù)字 |
+0 、 -0 和 NaN 都是 false 戒财,其他都是 true |
字符串 |
如果字符串是空的(長度是0)就是 false 热监,其他都是 true |
對象 |
true |
相等操作符( == 和 === )
類型(x) |
類型(y) |
結 果 |
null |
undefined |
true |
undefined |
null |
true |
數(shù)字 |
字符串 |
x == toNumber(y) |
字符串 |
數(shù)字 |
toNumber(x) == y |
布爾值 |
任何類型 |
toNumber(x) == y |
任何類型 |
布爾值 |
x == toNumber(y) |
字符串或數(shù)字 |
對象 |
x == toPrimitive(y) |
對象 |
字符串或數(shù)字 |
toPrimitive(x) == y |
- 如果x和y是相同類型,JavaScript會比較它們的值或對象值固翰。其他沒有列在這個表格中的情況
都會返回 false 狼纬。
- toNumber 和 toPrimitive 方法是內部的,并根據(jù)以下表格對其進行估值骂际。
- toNumber 方法對不同類型返回的結果如下:
值類型 |
結 果 |
undefined |
NaN |
null |
+0 |
布爾值 |
如果是 true 疗琉,返回 1 ;如果是 false 歉铝,返回 +0 |
數(shù)字 |
數(shù)字對應的值 |
字符串 |
將字符串解析成數(shù)字盈简。如果字符串中包含字母,返回 NaN 太示;如果是由數(shù)字字符組成的柠贤,轉換成數(shù)字 |
對象 |
Number(toPrimitive(vale)) |
- toPrimitive 方法對不同類型返回的結果如下:
值類型 |
結 果 |
對象 |
如果對象的 valueOf 方法的結果是原始值,返回原始值类缤。如果對象的 toString方法返回原始值臼勉,就返回這個值;其他情況都返回一個錯誤 |
- === 操作符餐弱,如果比較的兩個值類型不同宴霸,比較的結果就是 false 。如果比較的兩個值類型相同膏蚓,結果會根據(jù)下表判斷瓢谢。
類型(x) |
值 |
結 果 |
數(shù)字 |
x和y數(shù)值相同(但不是 NaN ) |
true |
字符串 |
x和y是相同的字符 |
true |
布爾值 |
x和y都是 true 或 false |
true |
對象 |
x和y引用同一個對象 |
true |
ECMAScript 6
- 用 let 替代 var 聲明變量
- 常量 const PI = 3.141593;
- 模板字面量
var name='123';
console.log(`my name is ${name}`);
let circleArea2 = (r) => 3.14 * r * r;
function sum(x=1,y=2,z=3){
return x+y+z;
}
sum(4,6);//13
在ES5中,我們可以用 apply() 函數(shù)把數(shù)組轉化為參數(shù)驮瞧。
ES6有了展開操作符( ... )氓扛。
var params = [3, 4, 5];
console.log(sum(...params));
等價于
var params = [3, 4, 5];
console.log(sum.apply(undefined, params));
在函數(shù)中,展開操作符( ... )也可以代替 arguments 论笔,當作剩余參數(shù)使用采郎。
function restParamaterFunction (x, y, ...a) {
return (x + y) * a.length;
}
console.log(restParamaterFunction(1, 2, "hello", true, 7)); //輸出9;
等價于
function restParamaterFunction (x, y) {
var a = Array.prototype.slice.call(arguments, 2);
return (x + y) * a.length;
};
ES6引入了數(shù)組解構的概念,可以用來一次初始化多個變量
var [x,y] = ['a','b'];//初始化
[x,y] = [y,x];//值互換
class Book { //{2}
constructor (title, pages, isbn) {
this.title = title;
this.pages = pages;
this.isbn = isbn;
}
printIsbn(){
console.log(this.isbn);
}
}
- 繼承
class ITBook extends Book {
constructor (title, pages, isbn, technology) {
super(title, pages, isbn);
this.technology = technology;
}
printTechnology(){
console.log(this.technology);
}
}
let jsBook = new ITBook('學習JS算法', '200', '1234567890', 'JavaScript');
console.log(jsBook.title);
console.log(jsBook.printTechnology());
- 使用屬性存取器
class Person {
constructor (name) {
this._name = name;
}
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
}
let lotrChar = new Person('Frodo');
console.log(lotrChar.name); //{4}
lotrChar.name = 'Gandalf'; //{5}
console.log(lotrChar.name);
lotrChar._name = 'Sam'; //{6}
console.log(lotrChar.name);
- 其他功能
ES6還有其他一些功能狂魔,包括列表迭代器尉剩、類型數(shù)組、 Set 毅臊、 Map 、 WeakSet 、 WeakMap 管嬉、模塊皂林、尾調用、 Symbol 蚯撩,等等