javascript 中的零碎知識不要太多

如題罚渐,讀小紅書時捏膨,說到的特殊字面量秧均、特殊返回值、特殊屬性等特殊情況太多了号涯,我這腦子能記住就見鬼了目胡。比如:

javascript 包含以下幾個部分


  • 核心(ECMAScript)-- 核心功能
  • 文檔對象模型(DOM)-- 與網(wǎng)頁內(nèi)容交互
  • 瀏覽器對象模型 (BOM)-- 與瀏覽器交互

script元素


包含8個屬性,均是可選的链快,其中 :

  • asyncdefer 兩個屬性在下載時異步誉己,在執(zhí)行時阻塞,defer可延時執(zhí)行域蜗,僅用在外部文件巨双;
  • type 默認值是 text/javascript 噪猾,可以不寫;
  • 為避免延遲和白屏,一般放在</body>上面筑累;
<script>
  function sayHi(){
    console.log('hello world');
  }
</script>

文檔模式


HTML5以前有很多文檔模式:標準模式和混雜模式袱蜡;
HTML5以后,都用一種慢宗,且每個頁面都要寫坪蚁,如下:

<!DOCTYPE html>

區(qū)分大小寫


ECMAScript中的一切都區(qū)分大小寫,不論是變量婆廊、函數(shù)名還是操作符迅细;
即:變量test和變量Test是兩個不同變量;

標識符


所謂標識符淘邻,就是變量、函數(shù)湘换、屬性或參數(shù)的名稱宾舅;

規(guī)范

  • 首字符必須是字母、下劃線(_)和美元符($)彩倚;
  • 其他字符可以是字母筹我、下劃線、美元符和數(shù)字帆离,因為數(shù)字開頭會引起歧義蔬蕊;
  • 命名方式是駝峰大小寫形式(不是強制的),如:strName哥谷、myCar等岸夯;
  • 關鍵字、保留字们妥、true猜扮、falsenull不能作標識符;

變量聲明


變量可以保存任何類型的數(shù)據(jù)监婶,變量聲明用:var 旅赢、let 和 const;

注意

  • var 聲明的作用域惑惶;在函數(shù)內(nèi)聲明的var煮盼,在函數(shù)執(zhí)行完后會被銷毀;函數(shù)作用域带污;
  • var 聲明提升僵控,所以多處聲明會在作用域頂部自動合并;
  • let 聲明的范圍是塊作用域刮刑,且不會提升喉祭;
  • let 在同作用域中不允許二次聲明 會報: SyntaxError 养渴;
  • let 在全局聲明的變量不會成為window對象的屬性,var聲明的會(window.name)泛烙;
  • const 聲明時就要初始化變量理卑,且不能修改;如果聲明的是對象蔽氨,那么修改對象的屬性又是可以的藐唠;
  • const 不能用來聲明迭代變量(因為迭代變量會自增)

所以,聲明風格

  • 不使用var 鹉究;用let 和 const 足夠了宇立;
  • 優(yōu)先使用 const ,let 次之自赔;const強制保持變量不變妈嘹,需要變量迭代時再使用let;

數(shù)據(jù)類型


ECMAScript 的數(shù)據(jù)類型很靈活绍妨,一種數(shù)據(jù)類型可以當作多種數(shù)據(jù)類型來使用润脸,靈活反而容易糊涂;

  • 六種簡單數(shù)據(jù)類型:Undefined他去、Null毙驯、BooleanNumber灾测、StringSymbol(符號)爆价;
  • 一種復雜數(shù)據(jù)類型:Object(對象);

分解

  • Undefined 類型只有一個值媳搪,就是特殊值:undefined铭段,使用var和let 聲明了變量又沒初始化時,就是這個值蛾号;沒有聲明的變量輸出會報錯稠项,所以建議變量都要聲明;
  • Null 類型也只有一個值鲜结,就是特殊值:null展运;null值表示一個空對象指針,所以 typeof(null) 返回 object精刷;undefinednull 派生而來拗胜,所以 (null == undefined) 返回 true
  • undefined 和 null 都是假值怒允, Boolean(undefined)Boolean(null) 都是 false埂软;
  • Boolean 類型有兩個字面值:truefalse;任何數(shù)據(jù)類型的都能調(diào)用 Boolean(),除了上面的 undefinednull外勘畔,''(空字符串)所灸、0和NaN 調(diào)用 Boolean()時都為 false,其他都為 true炫七;
  • Number類型表示整數(shù)和浮點數(shù)爬立;3.125e7 是科學記數(shù)法;用二進制計算浮點數(shù)會不精確万哪,導致 0.1+0.2不等于 0.3侠驯;有個特殊的數(shù)值是NaN(意思是:Not a Number,即不是數(shù)值奕巍,例如:0/0 返回 NaN吟策,而 5/0 返回 Infinity,即無窮)的止,NaN不等于自身檩坚,即 (NaN == NaN) 返回 false
  • 數(shù)值轉(zhuǎn)換函數(shù)有三個: Number()冲杀、parseInt()parseFloat效床;用法上有細微且明顯的區(qū)別;
  • String類型表示 Unicode 字符序列权谁,可用雙引號("")、單引號(‘’)和反引號(``)標示憋沿;字符串一旦創(chuàng)建就不可變旺芽,要修改變量中的字符串值,須先銷毀原始字符串辐啄,后將新值保存到該變量采章;
  • 字符串轉(zhuǎn)換有兩種方式:第一種是 toString() 方法 ,形如:abc.toString()壶辜,幾乎所有值都有 toString()方法悯舟,除了 nullundefined;第二種是 String() 函數(shù)砸民,使用時抵怎,如果當前值有 toString()方法就調(diào)用該方法 ,如果沒有岭参,如 nullundefined反惕,則返回 nullundefined
  • symbol符號演侯,符號是原始值姿染,且符號實例是唯一、不可變的秒际。符號的用途是確保對象屬性使用唯一標識符悬赏,不會發(fā)生屬性沖突的危險狡汉。這個類型不太好理解。
  • Object類型闽颇,ECMAScript 中的對象是一組數(shù)據(jù)和功能的集合(很抽象)盾戴;用 new 操作符來創(chuàng)建;通過創(chuàng)建 Object類型的實例來創(chuàng)建對象进萄,然后再給對象添加屬性和方法捻脖,形如:let o= new Object();
  • Object 是派生其他對象的基類中鼠,Object類型的所有屬性和方法在派生的對象上同樣存在可婶,這些屬性和方法是:constructorhasOwnProperty()援雇、isPrototypeOf()矛渴、propertyIsEnumerable()toLocalString()惫搏、toString()valueOf()具温;因為Object是所有對象的基類,所以任何對象都有這些屬性和方法筐赔。

操作符


可用于操作數(shù)據(jù)值的操作符铣猩,包括數(shù)學操作符、位操作符茴丰、關系操作符和相等操作符达皿;
操作符可用于各種值,包括:字符串贿肩、數(shù)值峦椰、布爾值甚至是對象;
在應用給對象時汰规,操作符會調(diào)用 valueOf()toString()方法來取得可以計算的值汤功;

分解

  • 一元操作符:前綴,++num 溜哮、--num滔金;后綴,num++ 茬射、num--鹦蠕;后綴在混合計算時的遞增(或遞減)會先計算后遞增(或遞減);
  • 一元加和減:+還有拼接的意思在抛;- 取負值钟病;運算非數(shù)值時會先轉(zhuǎn)換數(shù)據(jù)類型;
  • 位操作符:按位非(~)、按位與(&)肠阱、按位或(|)票唆、按位異或(^)、左移(<<)和右移(>>屹徘、>>>)走趋;
  • 布爾運算符:邏輯非(!)、邏輯與(&&)噪伊、邏輯或(||)簿煌,優(yōu)先級 ! > &&> ||;有短路操作的情形鉴吹;
  • 乘性操作符:乘法操作符(*)姨伟、除法操作符(/)、取模操作符(%)和指數(shù)操作符(**)豆励;
  • 關系操作符:大于(>)夺荒、小于(<)、小于等于(<=)良蒸、大于等于(>=)這些操作符返回布爾值技扼;
  • 相等操作符:等于(==)、不等于(!=)嫩痰、全等(===)和不全等(!==)剿吻;
  • 條件操作符:(?:),如:let max = (num1 > num2) ? num1 : num2;串纺;
  • 賦值操作符:賦值號 =和橙、+=-=造垛、*=/=晰搀、%=等等五辽;
  • 逗號操作符:let num1 = 1, num2 = 2, num3 = 3;

操作符的優(yōu)先級

運算優(yōu)先級從上往下外恕,其中邏輯運算符 !的優(yōu)先級更高杆逗,且&&優(yōu)先級高于||

  • 1,()優(yōu)先級最高鳞疲;
  • 2罪郊,一元運算符:++--尚洽,!;
  • 3悔橄,算數(shù)運算符:先*/%癣疟,后+挣柬,-
  • 4睛挚,關系運算符:>邪蛔,<>=扎狱,<=侧到;
  • 5,相等運算符:==淤击,===匠抗,!=!==遭贸;
  • 6戈咳,邏輯運算符:先&&,后||壕吹;
  • 7著蛙,賦值運算符:=

if 語句: if -- else if -- else


只有一行代碼也要用語句塊耳贬;

if (i > 25) { 
 console.log("Greater than 25."); 
} else if (i < 0) { 
 console.log("Less than 0."); 
} else { 
 console.log("Between 0 and 25, inclusive."); 
}

do while 語句


是一種后測試循環(huán)語句(至少執(zhí)行一次)踏堡,即循環(huán)體中的代碼執(zhí)行后才會對退出條件進行求值;

let i = 0;
do{
i+=2;
}while(i<10)

while 語句


是先測試循環(huán)語句咒劲,即先檢測退出條件顷蟆,再執(zhí)行循環(huán)內(nèi)的代碼;

let i = 0; 
while(i<10){
  i+=2; 
}

for 語句

先測試語句腐魂,增加了進入循環(huán)之前的初始化代碼帐偎,和循環(huán)執(zhí)行后要執(zhí)行的表達式;

const count = 10;
for(let i=0; i<count; i++){
  console.log(i);
}

無法通過while實現(xiàn)的邏輯蛔屹,也無法使用for實現(xiàn)削樊;

for - in


用于枚舉對象中的非符號鍵屬性;

for(const propName in window){
  console.log(propName);  //  多達224個
}
  • ECMAScript 中對象的屬性是無序的兔毒,所有可枚舉的屬性都返回一次漫贞,但順序因瀏覽器而異;
  • 循環(huán)要迭代的變量是 nullundefined ,則不執(zhí)行循環(huán)體;

for - of

用于遍歷可迭代對象的元素罐栈;

for (const el of [1,2,3,4]){
  console.log(el); // 1,2,3,4
}

上面例子,顯示當前數(shù)組所有元素谴蔑,for-of循環(huán)會按照可迭代對象的 next() 方法產(chǎn)生值的順序迭代元素豌骏。

break 和 continue 語句


break 立即退出循環(huán),強制執(zhí)行循環(huán)后的下一條語句树碱;
continue 立即退出循環(huán)肯适,但會再次從循環(huán)頂部開始執(zhí)行;

先看break實例

let num = 0;
for (let i = 1; i < 10; i++) {
  if (i % 5 == 0) {
    break;
  }
  num++
}
console.log(num);  // 4

再看continue實例

let num = 0;
for (let i = 1; i < 10; i++) {
  if (i % 5 == 0) {
    continue;
  }
  num++
}
console.log(num);  // 8

switch語句


case 控制分支條件成榜,break跳出switch語句框舔;如果沒有break,代碼會繼續(xù)匹配下一個條件赎婚;default 關鍵字是在條件都不滿足時指定默認執(zhí)行的語句刘绣。

swicth(i){
  case 25:
    console.log('25');
    break;
  case 35:
    console.log('35');
    break;
  case 45:
    console.log('45');
    break;
  defalut:
    cosole.log('other');
}

注意

  • 最好給每個條件后加 break語句,否則會連續(xù)匹配多個條件挣输,除非確實需要這樣纬凤;
  • switch 條件的值,可以不是數(shù)值撩嚼,可以是所有數(shù)據(jù)類型停士,如:字符串甚至對象;
  • switch 語句在比較條件時使用全等操作符完丽,因此不會強制轉(zhuǎn)換數(shù)據(jù)類型恋技;

函數(shù)


可以封裝語句,可在任何地方逻族、任何時間執(zhí)行蜻底;

function sayHi(name,msg){
  console.log('hello' + name + ',' + msg);
}
sayHi('Jack','How r u today?')
function sum(num1,num2){
  return num1 + num2;
}
const res = sum(5,10); // 15

注意

  • 碰到 return語句,函數(shù)會立即停止執(zhí)行并退出聘鳞,因此return 語句后面的代碼不會執(zhí)行薄辅;
  • 最佳實踐是要么有返回值,要么沒有返回值抠璃,在某個條件下返回值的函數(shù)會帶來麻煩站楚;
  • 不返回值的函數(shù),實際上會返回特殊值: undefined;
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搏嗡,一起剝皮案震驚了整個濱河市源请,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彻况,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舅踪,死亡現(xiàn)場離奇詭異纽甘,居然都是意外死亡,警方通過查閱死者的電腦和手機抽碌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門悍赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來决瞳,“玉大人,你說我怎么就攤上這事左权∑ず” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵赏迟,是天一觀的道長屡贺。 經(jīng)常有香客問我,道長锌杀,這世上最難降的妖魔是什么甩栈? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮糕再,結果婚禮上量没,老公的妹妹穿的比我還像新娘。我一直安慰自己突想,他們只是感情好殴蹄,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猾担,像睡著了一般袭灯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垒探,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天妓蛮,我揣著相機與錄音,去河邊找鬼圾叼。 笑死蛤克,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的夷蚊。 我是一名探鬼主播构挤,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惕鼓!你這毒婦竟也來了筋现?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箱歧,失蹤者是張志新(化名)和其女友劉穎矾飞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呀邢,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡洒沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了价淌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片申眼。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞒津,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出括尸,到底是詐尸還是另有隱情巷蚪,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布濒翻,位于F島的核電站屁柏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肴焊。R本人自食惡果不足惜前联,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娶眷。 院中可真熱鬧似嗤,春花似錦、人聲如沸届宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豌注。三九已至伤塌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轧铁,已是汗流浹背每聪。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齿风,地道東北人药薯。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像救斑,于是被迫代替她去往敵國和親童本。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1 閉包 閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù) 閉包是指有權訪問另一個函數(shù)作用域中變量的函數(shù)脸候,創(chuàng)建閉包的最常見的...
    Promise_4483閱讀 579評論 0 0
  • 內(nèi)存管理機制 內(nèi)存可以分為三大區(qū)域: 代碼區(qū):存放程序編譯后的機器指令 靜態(tài)數(shù)據(jù)區(qū):存放全變變量穷娱,靜態(tài)變量,字符串...
    奇楠之后閱讀 169評論 0 0
  • 1 什么是JavaScript JavaScript一種直譯式腳本語言运沦,一種基于對象和事件驅(qū)動并具有安全性的客戶端...
    前白閱讀 793評論 0 17
  • 1.變量 1.1 變量規(guī)則 變量只能包含字母泵额、下劃線、美元符號或數(shù)字携添;第一個字符不能是數(shù)字梯刚。ECMAScript ...
    sylvia_yue閱讀 472評論 0 3
  • 久違的晴天,家長會薪寓。 家長大會開好到教室時亡资,離放學已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗向叉。 放學鈴聲...
    飄雪兒5閱讀 7,523評論 16 22