js問(wèn)題一

JavaScript 的核心語(yǔ)法包括磷箕?

基本的語(yǔ)法構(gòu)造(比如變量沥阳、操作符、控制結(jié)構(gòu)泽论、語(yǔ)句戳杀、注釋)和標(biāo)準(zhǔn)庫(kù)(就是一系列具有各種功能的對(duì)象比如Array该面、Date夭苗、Math等)

瀏覽器提供JavaScript 調(diào)用的額外 API有哪幾類?

  • BOM(Browser Object Model) 瀏覽器控制類:操作瀏覽器
  • DOM(Document Object Model) 頁(yè)面文檔操控類:操作網(wǎng)頁(yè)的各種元素
    DOM的最小組成單位叫做節(jié)點(diǎn)(node)隔缀,js提供了許多獲取和操作節(jié)點(diǎn)的方法
  • Web 類:實(shí)現(xiàn)互聯(lián)網(wǎng)的各種功能题造,http協(xié)議,websocket
image.png

JavaScript 的復(fù)雜性體現(xiàn)在哪兩個(gè)方面猾瘸?

  • JavaScript 要發(fā)揮作用界赔,需要掌握大量的外部 API,幾乎涉及網(wǎng)絡(luò)應(yīng)用的各個(gè)方面牵触,掌握它們絕非易事淮悼。
  • JavaScript 語(yǔ)言有一些設(shè)計(jì)缺陷,學(xué)習(xí) JavaScript荒吏,很大一部分時(shí)間是用來(lái)搞清楚哪些地方有陷阱敛惊。

為何要發(fā)明CoffeeScript渊鞋、TypeScript绰更、Dart 等類JS語(yǔ)言?

因?yàn)镴S語(yǔ)言設(shè)計(jì)坑太深锡宋,有時(shí)為了更合理地編寫 JavaScript 程序儡湾,就不能用 JavaScript 來(lái)寫,不得不發(fā)明新的語(yǔ)言执俩。

  • TypeScript 是一種微軟開(kāi)源的編程語(yǔ)言徐钠。由于JavaScript是弱類型的,TypeScript為JavaScript擴(kuò)展類和模塊的概念役首。正是由于TypeScript最大的特點(diǎn)是類型化尝丐,因此才叫做TypeScript。
  • 和TypeScript 相似的工具語(yǔ)言還有很多衡奥,主要分為兩個(gè)陣營(yíng):
    一個(gè)是類似 Babel 的陣營(yíng)爹袁,堅(jiān)持JavaScript 的語(yǔ)法風(fēng)格編寫,為開(kāi)發(fā)者提供最新的 ECMAScript 特性矮固。
    另一個(gè)則是Coffeescript失息、Dart等的陣營(yíng),它們的語(yǔ)法與 JavaScript 迥然不同档址,但最終會(huì)編譯為JavaScript盹兢。
  • Dart最初是由 Google 的 Chrome V8 團(tuán)隊(duì)打造。與TypeScript編譯JavaScript代碼不同守伸,Dart是跳過(guò)翻譯的步驟绎秒,直接在瀏覽器里面嵌入一個(gè) Dart 解釋引擎與 V8 并行。

JavaScript 與 Java 的區(qū)別和聯(lián)系尼摹?

  • 聯(lián)系:JavaScript 的基本語(yǔ)法和對(duì)象體系见芹,是模仿 Java 而設(shè)計(jì)的校辩。
  • 區(qū)別:
    • JS的函數(shù)是一種獨(dú)立的數(shù)據(jù)類型;
    • JS采用基于原型對(duì)象(prototype)的繼承鏈;
    • Java 語(yǔ)言需要編譯辆童,而 JS 則是運(yùn)行時(shí)由解釋器直接執(zhí)行;

JavaScript 與 ECMAScript 的關(guān)系?

ECMAScript 和 JavaScript 的關(guān)系是宜咒,前者是后者的規(guī)格,后者是前者的一種實(shí)現(xiàn)把鉴。ECMAScript 只用來(lái)標(biāo)準(zhǔn)化 JavaScript 這種語(yǔ)言的基本語(yǔ)法結(jié)構(gòu)故黑,與部署環(huán)境相關(guān)的標(biāo)準(zhǔn)都由其他標(biāo)準(zhǔn)規(guī)定,比如 DOM 的標(biāo)準(zhǔn)就是由 W3C組織制定的庭砍。

什么是語(yǔ)句场晶?

語(yǔ)句(statement)是為了完成某種任務(wù)而進(jìn)行的操作;

語(yǔ)句和表達(dá)式的區(qū)別怠缸?

前者主要為了進(jìn)行某種操作诗轻,一般情況下不需要返回值;后者則是為了得到返回值揭北,一定會(huì)返回一個(gè)值扳炬。表達(dá)式不需要分號(hào)結(jié)尾,一旦在表達(dá)式后面添加分號(hào)搔体,則 JavaScript 引擎就將表達(dá)式視為語(yǔ)句恨樟。

為何說(shuō)JavaScript 是一種動(dòng)態(tài)類型語(yǔ)言?

因?yàn)樽兞康念愋蜎](méi)有限制疚俱,變量可以隨時(shí)更改類型劝术。

什么是變量提升?

由于JS引擎先解析后運(yùn)行代碼呆奕,所以所有變量的聲明語(yǔ)句养晋,都會(huì)被提升到代碼的頭部,這就是變量提升梁钾。

為何有些開(kāi)發(fā)者習(xí)慣將常量寫在運(yùn)算符的左邊绳泉?

避免不小心將相等運(yùn)算符寫成賦值運(yùn)算符而引起的未知bug,通過(guò)報(bào)錯(cuò)提前發(fā)現(xiàn)陈轿。

if (x = 2) { // 不報(bào)錯(cuò)
if (2 = x) { // 報(bào)錯(cuò)

為何switch每個(gè)case代碼塊內(nèi)部的break語(yǔ)句不能少?

否則會(huì)接下去執(zhí)行下一個(gè)case代碼塊圈纺,而不是跳出switch結(jié)構(gòu)。

為何switch進(jìn)行比較時(shí)不會(huì)發(fā)生類型轉(zhuǎn)換麦射?

switch語(yǔ)句后面的表達(dá)式蛾娶,與case語(yǔ)句后面的表示式比較運(yùn)行結(jié)果時(shí),采用的是嚴(yán)格相等運(yùn)算符(===)潜秋,而不是相等運(yùn)算符(==)蛔琅。

break 語(yǔ)句和 continue 語(yǔ)句的作用?

跳轉(zhuǎn)作用峻呛,可以讓代碼不按既有的順序執(zhí)行罗售。

JavaScript 的數(shù)據(jù)類型有辜窑?

數(shù)值、字符串寨躁、布爾值三種基本類型穆碎,對(duì)象這一種復(fù)雜類型,undefined和null 兩個(gè)特殊值职恳,以及ES6 新增的第七種 Symbol 類型所禀。

JavaScript 的“函數(shù)式編程”的基礎(chǔ)是?

把函數(shù)當(dāng)成一種數(shù)據(jù)類型放钦,可以賦值給變量

JS中確定一個(gè)值是什么類型的方法有色徘?

  • typeof運(yùn)算符
  • instanceof運(yùn)算符
  • Object.prototype.toString方法

為何typeof 用來(lái)檢查一個(gè)沒(méi)有聲明的變量不報(bào)錯(cuò)?

因?yàn)?typeof undefined // "undefined"

為何typeof null返回object操禀?

歷史原因造成的褂策,一開(kāi)始沒(méi)考慮null,只把它當(dāng)作object的一種特殊值颓屑,后來(lái)null獨(dú)立出來(lái)斤寂,作為一種單獨(dú)的數(shù)據(jù)類型,但需要兼容以前的代碼邢锯,所以你懂的扬蕊。。丹擎。

null 和 undefined 的區(qū)別?

null是一個(gè)表示“空”的對(duì)象歇父,轉(zhuǎn)為數(shù)值時(shí)為0蒂培;undefined是一個(gè)表示"此處無(wú)定義"的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN榜苫。

談?wù)勀銓?duì)JS轉(zhuǎn)換規(guī)則的理解护戳?

如果 JavaScript 預(yù)期某個(gè)位置應(yīng)該是布爾值,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值垂睬。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false媳荒,其他值都視為true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""或''(空字符串)

空數(shù)組([])和空對(duì)象({})對(duì)應(yīng)的布爾值是驹饺?

都是true

為何說(shuō)JavaScript 語(yǔ)言的底層根本沒(méi)有整數(shù)钳枕?

JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點(diǎn)數(shù)形式儲(chǔ)存赏壹,即使整數(shù)也是如此鱼炒。所以,1與1.0是相同的蝌借,是同一個(gè)數(shù)昔瞧。1 === 1.0 // true

為何JS中任何一個(gè)數(shù)都有一個(gè)對(duì)應(yīng)的負(fù)值指蚁?

JavaScript 的64位浮點(diǎn)數(shù)之中,有一個(gè)二進(jìn)制位是符號(hào)位自晰。

+0 和 -0的區(qū)別凝化?

幾乎所有場(chǎng)合,正零和負(fù)零都會(huì)被當(dāng)作正常的0酬荞。唯一有區(qū)別的場(chǎng)合是缘圈,+0或-0當(dāng)作分母,返回的值是不相等的袜蚕。

NaN的作用是糟把?

主要是用于將字符串解析成數(shù)字出錯(cuò)的場(chǎng)合。NaN不是獨(dú)立的數(shù)據(jù)類型牲剃,而是一個(gè)特殊數(shù)值遣疯,typeof NaN。NaN === NaN // false

parseInt 需要注意的有凿傅?

  • 字符串頭部有空格缠犀,空格會(huì)被自動(dòng)去除;
  • 參數(shù)不是字符串聪舒,則會(huì)先轉(zhuǎn)為字符串再轉(zhuǎn)換辨液;
  • 遇到不能轉(zhuǎn)為數(shù)字的字符,就不再進(jìn)行下去箱残,返回已經(jīng)轉(zhuǎn)好的部分滔迈;
  • 第一個(gè)字符不能轉(zhuǎn)化為數(shù)字(后面跟著數(shù)字的正負(fù)號(hào)除外),返回NaN被辑;
  • 返回值只有兩種可能燎悍,要么是一個(gè)十進(jìn)制整數(shù),要么是NaN盼理;
  • 如果第二個(gè)參數(shù)是0谈山、undefined和null,則直接忽略宏怔;

為何使用isNaN之前奏路,最好判斷一下數(shù)據(jù)類型?

因?yàn)閕sNaN只對(duì)數(shù)值有效臊诊,如果傳入其他值鸽粉,會(huì)被先轉(zhuǎn)成數(shù)值。當(dāng)isNaN為true的值妨猩,有可能不是NaN潜叛。

function myIsNaN(value) {
  return typeof value === 'number' && isNaN(value);
}
// 更可靠
function myIsNaN(value) {
  return value !== value;
}

很多項(xiàng)目約定 JavaScript 語(yǔ)言的字符串只使用單引號(hào)?

因?yàn)镠TML 語(yǔ)言的屬性值使用雙引號(hào),使用雙引號(hào)的話需要轉(zhuǎn)義威兜。

如何把長(zhǎng)字符串分成多行销斟?

在每一行的尾部使用反斜杠

字符串與數(shù)組的關(guān)系?

字符串可以被視為字符數(shù)組椒舵,因此可以使用數(shù)組的方括號(hào)運(yùn)算符蚂踊,用來(lái)返回某個(gè)位置的字符,但是無(wú)法改變字符串之中的單個(gè)字符和length屬性笔宿。

什么是對(duì)象犁钟?

對(duì)象就是一組“鍵值對(duì)”(key-value)的集合,是一種無(wú)序的復(fù)合數(shù)據(jù)集合泼橘。

對(duì)象的所有鍵名加不加引號(hào)都可以?

因?yàn)閷?duì)象的所有鍵名都是字符串

如何理解對(duì)象的引用涝动?

如果不同的變量名指向同一個(gè)對(duì)象,那么它們都是這個(gè)對(duì)象的引用炬灭,也就是說(shuō)指向同一個(gè)內(nèi)存地址醋粟。修改其中一個(gè)變量,會(huì)影響到其他所有變量重归。

如果行首是一個(gè)大括號(hào)米愿,它到底是表達(dá)式還是語(yǔ)句?

JavaScript 引擎的做法是鼻吮,如果遇到這種情況育苟,無(wú)法確定是對(duì)象還是代碼塊,一律解釋為代碼塊椎木。如果要解釋為對(duì)象违柏,最好在大括號(hào)前加上圓括號(hào)。

為何數(shù)值鍵名不能使用點(diǎn)運(yùn)算符拓哺?

因?yàn)闀?huì)被當(dāng)成小數(shù)點(diǎn)勇垛,只能使用方括號(hào)運(yùn)算符。

什么時(shí)候delete命令會(huì)返回false士鸥?

該屬性存在,且不得刪除

delete命令可以刪除對(duì)象的所有屬性嗎谆级?

只能刪除對(duì)象本身的屬性烤礁,無(wú)法刪除繼承的屬性,即使delete返回true肥照,該屬性依然可能讀取到值脚仔。

in運(yùn)算符的問(wèn)題?

不能識(shí)別哪些屬性是對(duì)象自身的舆绎,哪些屬性是繼承的鲤脏。可以使用對(duì)象的hasOwnProperty方法判斷一下,是否為對(duì)象自身的屬性猎醇。

for...in循環(huán)有使用注意點(diǎn)有窥突?

  • 它遍歷的是對(duì)象所有可遍歷(enumerable)的屬性,會(huì)跳過(guò)不可遍歷的屬性硫嘶。
  • 它不僅遍歷對(duì)象自身的屬性阻问,還遍歷繼承的屬性。

什么是函數(shù)沦疾?

函數(shù)是一段可以反復(fù)調(diào)用的代碼塊称近。函數(shù)還能接受輸入的參數(shù),不同的參數(shù)會(huì)返回不同的值哮塞。

JavaScript 三種聲明函數(shù)的方法刨秆?

  • function 命令
  • 函數(shù)表達(dá)式
  • Function 構(gòu)造函數(shù)(非常不直觀,幾乎無(wú)人使用)

什么是遞歸忆畅?

函數(shù)調(diào)用自身

為何凡是可以使用值的地方衡未,就能使用函數(shù)?

因?yàn)镴avaScript 語(yǔ)言將函數(shù)看作一種值邻眷,與其它值(數(shù)值眠屎、字符串、布爾值等等)地位相同肆饶。

如果同時(shí)采用function命令和賦值語(yǔ)句聲明同一個(gè)函數(shù)改衩?

總是采用賦值語(yǔ)句的定義

函數(shù)name屬性和函數(shù)的length屬性的作用?

獲取參數(shù)函數(shù)的名字和參數(shù)個(gè)數(shù),函數(shù)的length屬性與實(shí)際傳入的參數(shù)個(gè)數(shù)無(wú)關(guān)驯镊,只反映函數(shù)預(yù)期傳入的參數(shù)個(gè)數(shù)葫督。

函數(shù)的toString方法

返回一個(gè)字符串,內(nèi)容是函數(shù)的源碼板惑。

什么是作用域?

指的是變量存在的范圍

如果在函數(shù)體內(nèi)修改參數(shù)值橄镜,會(huì)不會(huì)影響到函數(shù)外部?

  • 如果是原始類型的值(數(shù)值冯乘、字符串洽胶、布爾值),傳遞方式是傳值傳遞裆馒,不影響姊氓;
  • 如果是復(fù)合類型的值(數(shù)組、對(duì)象喷好、其他函數(shù))翔横,傳遞方式是傳址傳遞。在函數(shù)內(nèi)部修改參數(shù)梗搅,將會(huì)影響到原始值;
  • 如果函數(shù)內(nèi)部修改的禾唁,不是參數(shù)對(duì)象的某個(gè)屬性效览,而是替換掉整個(gè)參數(shù),這時(shí)不會(huì)影響到原始值;

為何要有arguments對(duì)象荡短?

由于 JavaScript 允許函數(shù)有不定數(shù)目的參數(shù)丐枉,所以需要一種機(jī)制,可以在函數(shù)體內(nèi)部讀取所有參數(shù)肢预。arguments對(duì)象包含了函數(shù)運(yùn)行時(shí)的所有參數(shù)矛洞,arguments[0]就是第一個(gè)參數(shù),arguments[1]就是第二個(gè)參數(shù)烫映,以此類推沼本。這個(gè)對(duì)象只有在函數(shù)體內(nèi)部,才可以使用锭沟。

如何理解閉包抽兆?

定義在一個(gè)函數(shù)內(nèi)部的函數(shù),本質(zhì)上族淮,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的一座橋梁辫红。

閉包的用處?

  • 讀取函數(shù)內(nèi)部的變量
  • 讓這些變量始終保持在內(nèi)存中
  • 封裝對(duì)象的私有屬性和私有方法

為何不能濫用不能濫用閉包祝辣?

內(nèi)存消耗會(huì)很大贴妻,造成網(wǎng)頁(yè)的性能問(wèn)題。

使用立即執(zhí)行的函數(shù)表達(dá)式的目的蝙斜?

  • 一是不必為函數(shù)命名名惩,避免了污染全局變量;
  • 二是 IIFE 內(nèi)部形成了一個(gè)單獨(dú)的作用域孕荠,可以封裝一些外部無(wú)法讀取的私有變量娩鹉。

數(shù)組需要注意的是?

  • 由于數(shù)組本質(zhì)上是一種對(duì)象稚伍,所以可以為數(shù)組添加屬性弯予,但是這不影響length屬性的值
  • 如果數(shù)組的鍵名是添加超出范圍的數(shù)值,該鍵名會(huì)自動(dòng)轉(zhuǎn)為字符串个曙,且length屬性沒(méi)有發(fā)生變化锈嫩。
  • for...in不僅會(huì)遍歷數(shù)組所有的數(shù)字鍵,還會(huì)遍歷非數(shù)字鍵垦搬;
  • 使用delete命令刪除一個(gè)數(shù)組成員祠挫,會(huì)形成空位,并且不會(huì)影響length屬性悼沿;

數(shù)組的某個(gè)位置是空位與某個(gè)位置是undefined的區(qū)別?

如果是空位骚灸,使用數(shù)組的forEach方法糟趾、for...in結(jié)構(gòu)、以及Object.keys方法進(jìn)行遍歷,空位都會(huì)被跳過(guò)义郑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝶柿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子非驮,更是在濱河造成了極大的恐慌交汤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劫笙,死亡現(xiàn)場(chǎng)離奇詭異芙扎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)填大,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門戒洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人允华,你說(shuō)我怎么就攤上這事圈浇。” “怎么了靴寂?”我有些...
    開(kāi)封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵磷蜀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我百炬,道長(zhǎng)褐隆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任收壕,我火速辦了婚禮妓灌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜜宪。我一直安慰自己虫埂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布圃验。 她就那樣靜靜地躺著掉伏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澳窑。 梳的紋絲不亂的頭發(fā)上斧散,一...
    開(kāi)封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音摊聋,去河邊找鬼鸡捐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛麻裁,可吹牛的內(nèi)容都是我干的箍镜。 我是一名探鬼主播源祈,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼色迂!你這毒婦竟也來(lái)了香缺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤歇僧,失蹤者是張志新(化名)和其女友劉穎图张,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诈悍,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祸轮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了写隶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔撞。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慕趴,靈堂內(nèi)的尸體忽然破棺而出痪蝇,到底是詐尸還是另有隱情,我是刑警寧澤冕房,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布躏啰,位于F島的核電站,受9級(jí)特大地震影響耙册,放射性物質(zhì)發(fā)生泄漏给僵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一详拙、第九天 我趴在偏房一處隱蔽的房頂上張望帝际。 院中可真熱鬧,春花似錦饶辙、人聲如沸蹲诀。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脯爪。三九已至,卻和暖如春矿微,著一層夾襖步出監(jiān)牢的瞬間痕慢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工涌矢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掖举,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓娜庇,卻偏偏與公主長(zhǎng)得像拇泛,于是被迫代替她去往敵國(guó)和親滨巴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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