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