1、console.log([]==[]); 2、console.log(![]==[]); 3、console.log(![]==![]); 4、 console.log(![]==false); 5、console.log([]==true); 6、console.log([]=="");7、console.log(0==![]); 8、console.log(0==[]);
解釋:數(shù)組也是對(duì)象,兩個(gè)數(shù)組引用地址不同,所以結(jié)果為false
解釋:!運(yùn)算符優(yōu)先級(jí)比==高------->先求![] !會(huì)將后面的數(shù)組強(qiáng)轉(zhuǎn)換為布爾類型 數(shù)組為對(duì)象類型------>所以空數(shù)組轉(zhuǎn)換為布爾類型也為true------> ![]為false. 如果數(shù)組前無!,默認(rèn)轉(zhuǎn)換為"",------->后者[]為"". 題目轉(zhuǎn)換為false=="" ,結(jié)果為true
解釋: !會(huì)將后面的數(shù)組強(qiáng)轉(zhuǎn)換為布爾類型------>左右皆轉(zhuǎn)換為false,false==false,結(jié)果為true.
解釋: !會(huì)將后面的數(shù)組強(qiáng)轉(zhuǎn)換為布爾類型------>左邊轉(zhuǎn)換為false,false==false,結(jié)果為true.
解釋:[]默認(rèn)轉(zhuǎn)換為"",題目轉(zhuǎn)換為""==true,結(jié)果為false。(空字符串轉(zhuǎn)換為布爾值為false)
解釋: []默認(rèn)轉(zhuǎn)換為"",題目轉(zhuǎn)換為""=="",結(jié)果為true。
解釋:0轉(zhuǎn)換為布爾值為false,后者將數(shù)組強(qiáng)轉(zhuǎn)為布爾型,![]為false,題目轉(zhuǎn)換為false==false,結(jié)果為true.
解釋: 0轉(zhuǎn)換為布爾值為false,后者數(shù)組默認(rèn)轉(zhuǎn)換為"",空字符串轉(zhuǎn)換為布爾值為false,題目轉(zhuǎn)換為false==false,結(jié)果為true.
注:"", 0 , false, undefined, null, NaN 轉(zhuǎn)換為布爾值都會(huì)變成false
JavaScript中,布爾值的隱式強(qiáng)制類型轉(zhuǎn)換通常發(fā)生在以下幾種情況下:
需要注意的是,除了上述情況外,其他情況下不會(huì)發(fā)生隱式的布爾值強(qiáng)制類型轉(zhuǎn)換。例如,在算術(shù)運(yùn)算或比較運(yùn)算中,即使操作數(shù)被隱式轉(zhuǎn)換為布爾值,也不會(huì)改變?cè)贾档念愋汀?/p>
.JavaScript概念
??JavaScript是一種基于原型的面向?qū)ο蟮恼Z言。
??同時(shí),因?yàn)镴avaScript是腳本語言,而腳本語言又是一種解釋性的語言,
??所以JavaScript是逐行執(zhí)行的同時(shí)也具有解釋型語言的特點(diǎn):不需要編譯可以直接使用,由解釋器來負(fù)責(zé)解釋。
2.JavaScript特點(diǎn)
(1)面向?qū)ο?/strong>
??JavaScript 語言標(biāo)準(zhǔn)已經(jīng)明確說明,JavaScript 是一門面向?qū)ο蟮恼Z言;
??JavaScript是否屬于“面向?qū)ο蟮恼Z言”一直飽受爭議,一些爭論中,有人強(qiáng)調(diào),JavaScript 并非“面向?qū)ο蟮恼Z言”,而是“基于對(duì)象的語言”,這個(gè)說法也一度流傳甚廣。JavaScript 的對(duì)象設(shè)計(jì)跟目前主流基于類的面向?qū)ο蟛町惙浅4蟆6聦?shí)上,這樣的對(duì)象系統(tǒng)設(shè)計(jì)雖然特別,但是 JavaScript 提供了完全運(yùn)行時(shí)的對(duì)象系統(tǒng),這使得它可以模仿多數(shù)面向?qū)ο缶幊谭妒剑运彩钦y(tǒng)的面向?qū)ο笳Z言。而因?yàn)榕c基于類的面向?qū)ο蟮牟町悾覀円卜QJavaScript 為基于原型的面向?qū)ο蟆?/p>
(2)腳本語言
??又被稱為動(dòng)態(tài)語言,只在被調(diào)用時(shí)進(jìn)行解釋或編譯。在程序的運(yùn)行過程中逐行解釋執(zhí)行。
(3)解釋性語言
??不需要編譯可以直接使用,由宿主環(huán)境(瀏覽器)解釋執(zhí)行。
我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個(gè)月整理了一份最適合2019年學(xué)習(xí)的web前端學(xué)習(xí)干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關(guān)注我的頭條號(hào)并在后臺(tái)私信我:前端,即可免費(fèi)獲取。
(4)事件驅(qū)動(dòng)
??JavaScript對(duì)用戶的響應(yīng),是以事件驅(qū)動(dòng)的方式進(jìn)行的。在網(wǎng)頁(Web Page)中執(zhí)行了某種操作所產(chǎn)生的動(dòng)作,被稱為“事件”(Event)。例如按下鼠標(biāo)、移動(dòng)窗口、選擇菜單等都可以被視為事件。當(dāng)事件發(fā)生后,可能會(huì)引起相應(yīng)的事件響應(yīng),執(zhí)行某些對(duì)應(yīng)的腳本,這種機(jī)制被稱為“事件驅(qū)動(dòng)”。
(5)動(dòng)態(tài)性
??語言的動(dòng)態(tài)性,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu)。在一個(gè) JavaScript 對(duì)象中,要為一個(gè)屬性賦值時(shí),我們不必事先創(chuàng)建一個(gè)變量,只需要在使用的時(shí)候做賦值操作即可。
(6)弱類型&松散類型
?? 弱類型語言聲明數(shù)據(jù)時(shí)不需要指定數(shù)據(jù)類型,一個(gè)變量可以賦不同數(shù)據(jù)類型的值,不同類型數(shù)據(jù)在計(jì)算過程中會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換,在參與運(yùn)算的過程中,JavaScript會(huì)將其自動(dòng)轉(zhuǎn)換為數(shù)據(jù)類型,比如JavaScript中布爾類型的數(shù)據(jù)可以直接參與運(yùn)算。
(7)單線程與異步處理共存
??單線程程序的執(zhí)行順序是從上到下依次執(zhí)行,一個(gè)程序中只可以執(zhí)行一個(gè)程序。而異步處理不用阻塞當(dāng)前線程來等待處理完成,而是允許后續(xù)操作,直至其它線程將處理完成。二者看起來相互矛盾,不能夠同時(shí)存在,可是JavaScript以一種巧妙地方式用單線程實(shí)現(xiàn)了異步處理的效果。
??在JavaScript的主線程和任務(wù)隊(duì)列中間還存在一個(gè)WebAPIs,這個(gè)WebAPIs是瀏覽器單獨(dú)為處理JavaScript的異步任務(wù)開辟的線程。當(dāng)主線程棧中的函數(shù)需要異步處理的時(shí)候,主線程會(huì)把需要異步的部分推給WebAPIs,這部分異步由瀏覽器去執(zhí)行,執(zhí)行完異步之后將處理后的結(jié)果以事件的形式丟到任務(wù)隊(duì)列中,這個(gè)事件就是我們寫代碼時(shí)的“回調(diào)函數(shù)”。
(8)跨平臺(tái)
??JavaScript依賴于瀏覽器本身,與操作環(huán)境無關(guān)。
(9)安全性語言
??JavaScript是一種安全性語言,它不允許訪問本地的硬盤,并不能將數(shù)據(jù)存入到服務(wù)器上,不允許對(duì)網(wǎng)絡(luò)文檔進(jìn)行修改和刪除,只能通過瀏覽器實(shí)現(xiàn)信息瀏覽或動(dòng)態(tài)交互。從而有效地防止數(shù)據(jù)的丟失。
3.javaScript的核心
??JavaScript 的三大核心為ECMAScript、DOM 和 BOM。
??ECMAScript(核心):
????描述了該語言的語法和基本對(duì)象,ECMAScript是一種由Ecma國際(前身為歐洲計(jì)算機(jī)制造商協(xié)會(huì),European Computer Manufacturers Association)通過ECMA-262標(biāo)準(zhǔn)化的腳本程序設(shè)計(jì)語言。這種語言在萬維網(wǎng)上應(yīng)用廣泛,它往往被稱為JavaScript或JScript,所以它可以理解為是JavaScript的一個(gè)標(biāo)準(zhǔn),但實(shí)際上后兩者是ECMA-262標(biāo)準(zhǔn)的實(shí)現(xiàn)和擴(kuò)展。
??DOM(文檔對(duì)象模型):
????描述了處理網(wǎng)頁內(nèi)容的方法和接口;是W3C組織推薦的處理可擴(kuò)展置標(biāo)語言的標(biāo)準(zhǔn)編程接口。是一種與平臺(tái)和語言無關(guān)的應(yīng)用程序接口(API),它可以動(dòng)態(tài)地訪問程序和腳本,更新其內(nèi)容、結(jié)構(gòu)和www文檔的風(fēng)格(目前,HTML和XML文檔是通過說明部分定義的)。
??BOM(瀏覽器對(duì)象模型):
????描述了與瀏覽器進(jìn)行交互的方法和接口;用于描述這種對(duì)象與對(duì)象之間層次關(guān)系的模型,瀏覽器對(duì)象模型提供了獨(dú)立于內(nèi)容的、可以與瀏覽器窗口進(jìn)行互動(dòng)的對(duì)象結(jié)構(gòu)。BOM由多個(gè)對(duì)象組成,其中代表瀏覽器窗口的Window對(duì)象是BOM的頂層對(duì)象,其他對(duì)象都是該對(duì)象的子對(duì)象。
4.javaScript的使用
html頁面中寫在<script></script>標(biāo)簽內(nèi)
引入外部.js文件
??引入的多個(gè)js文件,會(huì)按順序分開執(zhí)行。同樣的,對(duì)于不同<script>標(biāo)簽嵌入的JavaScript代碼,也會(huì)根據(jù)腳本標(biāo)簽<script>的出現(xiàn)順序來分開執(zhí)行。由于JavaScript通常需要操作DOM,所以,一般把JavaScript放在前或者文檔結(jié)尾處引入。若需要在中引入,可以通過修改window.onload或者document.ready事件,強(qiáng)制等到DOM加載完成后再執(zhí)行相關(guān)函數(shù)。
5.javaScript的執(zhí)行順序
??JavaScript代碼執(zhí)行分為兩個(gè)部分:
預(yù)編譯階段,進(jìn)行代碼的檢查裝載,同樣也是按從上到下按順序進(jìn)行的。此階段只進(jìn)行變量和函數(shù)的聲明,會(huì)跳過執(zhí)行語句,不對(duì)變量進(jìn)行賦值,變量的默認(rèn)值為undefined。即使聲明是在調(diào)用的下方進(jìn)行的,但瀏覽器仍然先聲明再調(diào)用(執(zhí)行),這個(gè)現(xiàn)象叫做“聲明提升”。所以,即便一個(gè)函數(shù)的聲明在函數(shù)調(diào)用的下方,前面仍然可以正常執(zhí)行這個(gè)函數(shù),需要注意的是函數(shù)聲明的提升優(yōu)先于變量聲明的提升。(js代碼的執(zhí)行是讀一行代碼執(zhí)行一行,但在執(zhí)行之前系統(tǒng)會(huì)先對(duì)js進(jìn)行全面掃描檢查是否存在低級(jí)的語法錯(cuò)誤,并不會(huì)立即執(zhí)行語句。)
原文鏈接:https://blog.csdn.net/qq_28453669/article/details/103211948
作者:Simeow
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。