單選題
JS基礎(chǔ)
js概念與類(lèi)型檢測(cè)
- 以下不屬于 typeof 運(yùn)算符返回值的是?
A. "string"
B. "function"
C. "object"
D. "null"
- 執(zhí)行以下代碼,錯(cuò)誤的輸出結(jié)果是
A. 輸入:typeof {"x":1} 輸出:"object"
B. 輸入:typeof 1 輸出:"number"
C. 輸入:typeof [{x:1}] 輸出:"array"
D. 輸入:typeof NaN 輸出:"number"
- 可以用typeof來(lái)判斷的基本類(lèi)型有
A. undefined
B. null
C. array
D. object
- 以下不屬于JAVAScript基本數(shù)據(jù)類(lèi)型的是:
A. Boolean
B. undefined
C. Symbol
D. Array
- 以下關(guān)于JavaScript中數(shù)據(jù)類(lèi)型的說(shuō)法錯(cuò)誤的是()
A. 數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型
B. JavaScript一共有8種數(shù)據(jù)類(lèi)型
C. Object是引用數(shù)據(jù)類(lèi)型,且只存儲(chǔ)于堆(heap)中
D. BigInt是可以表示任意精度整數(shù)的基本數(shù)據(jù)類(lèi)型,存儲(chǔ)于棧(stack)中
答案
DCADC
邏輯判斷
- 請(qǐng)選擇結(jié)果為ture的表達(dá)式?
A. null instanceof Object
B. null === undefined
C. null == undefined
D. NaN == NaN
- 下列代碼結(jié)果為 true 的是?
A. Symbol.for('a') === Symbol.for('a')
B. Symbol('a') === Symbol('a')
C. NaN === NaN
D. {} === {}
- 根據(jù)如下變量,下列表達(dá)式中返回值為true的是
var a = 1;
var b = [];
var c = '';
var d = true;
A. (a || b) === true
B. (b && c) === true
C. (c && d) === true
D. (d || a) === true
- 1==true的返回值是true,這句話是否正確?
A. T
B. F
- 下面代碼輸出為true的是?
A. console.log([] === []);
B. console.log(undefined == 0);
C. console.log(undefined == false);
D. console.log(false == '');
- 瀏覽器環(huán)境下,以下打印結(jié)果為true的是
A. console.log("12" === 12)
B. console.log (NaN === NaN)
C. console.log (typeof(null) === typeof(window))
D. console.log ([1,2,3] === [1,2,3])
注意瀏覽器環(huán)境與node環(huán)境的差別,比如C選項(xiàng)
- 以下表達(dá)式,正確的是
A. Number('a') == Number('a')
B. -1 == true
C. 3 + '2' === 5
D. ![] == ''
答案
CADADCD
Math
- 如何把 7.25 四舍五入為最接近的整數(shù)
A. Math.round(7.25)
B. Math.ceil(7.25)
C. round(7.25)
D. Math.rnd(7.25)
- 下面哪個(gè)選項(xiàng)可以產(chǎn)生0<=num<=10的隨機(jī)整數(shù)
A. Math.floor(Math.random()*6)
B. Math.floor(Math.random()*10)
C. Math.floor(Math.random()*11)
D. Math.ceil(Math.random()*10)
- 以下( )表達(dá)式產(chǎn)生一個(gè)0~7之間(含0,7)的隨機(jī)整數(shù)
A. Math.floor(Math.random()*6)
B. Math.floor(Math.random()*7)
C. Math. floor(Math.random()*8)
答案
A CD(注意D) C
字符串
- split() 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組。
A. T
B. F
- String對(duì)象的哪個(gè)方法可以尋找子字符串并返回該子字符串位置
A. match()
B. indexOf()
C. search()
D. concat()
答案
A BC
JSON
- 下面哪一個(gè)是JSON數(shù)據(jù)?
A. {name:"xiaoming",age,"student"}
B. {"name":"xiaoming","age":"student"}
C. {"xiaoming","student"}
D. ["xiaoming","student"]
- 下面分別使用 JSON.stringify 方法,返回值 res 分別是
const fn = function(){}
const res = JSON.stringify(fn)
const num = 123
const res = JSON.stringify(num)
const res = JSON.stringify(NaN)
const b = true
const res = JSON.stringify(b)
A. 'function'、'123'、'NaN'、'true'
B. undefined、'123'、undefined、'true'
C. undefined、'123'、'null'、'true'
D. undefined、'123'、'null'、undefined
答案
BC
數(shù)組
- js數(shù)組中不會(huì)改變?cè)袛?shù)組的方法是()
A. push
B. concat
C. sort
D. shift
- 下列哪種數(shù)組的方法不會(huì)修改數(shù)組本身
A. slice
B. splice
C. sort
D. unshift
- JavaScript中需要往數(shù)組末尾處添加一個(gè)元素,應(yīng)該使用以下哪個(gè)方法:
A. push
B. pop
C. shift
D. unshift
- 以下js操作Array的方法中不能添加元素的是:
A. push
B. pop
C. unshift
D. splice
- 數(shù)組以下哪個(gè)方法會(huì)影響原數(shù)組?
A. concat
B. splice
C. slice
D. join
- JavaScript中,下列哪一個(gè)Array的方法的返回值類(lèi)型和其他不同
A. concat
B. shift
C. filter
D. map
- 如下的Array.prototype上的方法中,那個(gè)方法不會(huì)改變?cè)械臄?shù)組?
A. push
B. slice
C. splice
D. sort
- 對(duì)于一個(gè)數(shù)字組成的數(shù)組 nums,現(xiàn)在需要執(zhí)行在不改動(dòng) nums 的基礎(chǔ)上去重操作,返回一個(gè)新的無(wú)重復(fù)元素的數(shù)組,以下幾段代碼能完成這一操作的是()
// (1)
const newNums = Array.from(new Set(nums))
// (2)
const newNums = nums.filter((n, i) => {
return nums.indexOf(n) === i
})
// (3)
const newNums = nums.forEach((n, i) => {
return nums.indexOf(n) === i
})
// (4)
const newNums = nums.reduce((acc, n, i) => {
return [].concat(acc, nums.indexOf(n) === i ? n : []
)
})
A. (1)、(2)、(3)、(4)
B. (1)、(3)、(4)
C. (1)、(2)、(4)
D. (1)、(4)
答案
BAABB
BBC
正則
- 正則表達(dá)式 ^d+[^d]+ 能匹配下列哪個(gè)字符串?
A. 123
B. 123a
C. d123
D. 123def
- 下面哪個(gè)不是RegExp對(duì)象的方法
A. test
B. match
C. exec
D. compile
- 以下哪項(xiàng)可以去除變量str中的所有空格
A. str.replace(`/s*/g,""`)
B. str.replace(`/^s|s$/g,""`)
C. str.replace(`/^s*/, ""`)
D. str.replace(`/(s*$)/g, ""`)
答案
CBA
其他
- 下列函數(shù)哪個(gè)不是JavaScript的全局函數(shù)
A. encodeURI
B. parseFloat
C. round
D. eval
- 編寫(xiě)高性能JavaScript,以下描述錯(cuò)誤的是
A. 遵循嚴(yán)格模式:"use strict"
B. 將js腳本放在頁(yè)面頂部,加快渲染頁(yè)面
C. 將js腳本成組打包,減少請(qǐng)求,盡量減少使用閉包
D. 使用非阻塞方式下載js腳本,最小化重繪(repaint)和回流(reflow)
- 有關(guān)JavaScript中系統(tǒng)方法的描述,錯(cuò)誤的是?
A. parseFloat方法:該方法將一個(gè)字符串轉(zhuǎn)換成對(duì)應(yīng)的小數(shù)
B. isNaN方法:該方法用于檢測(cè)參數(shù)是否為數(shù)值型,如果是,返回true,否則,返回false。
C. escape方法: 該方法返回對(duì)一個(gè)字符串編碼后的結(jié)果字符串
D. eval方法:該方法將某個(gè)參數(shù)字符串作為一個(gè)JavaScript執(zhí)行題
- 下面列出的瀏覽器,無(wú)webkit內(nèi)核的是()
A. chrome
B. Safari
C. 搜狗瀏覽器
D. Firefox
- 下列代碼哪個(gè)能夠?qū)崿F(xiàn)獲取形式為 2017-08-01 形式的日期( )?
// A
var formatDate=getDate()
// B
var formatDate = new Date()
// C
var formatDate = function (date) {
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
return y + '-' + m + '-' + d;
};
// D
var formatDate = function (date) {
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? '0' + m : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
return y + '-' + m + '-' + d;
};
- 下面哪一項(xiàng)不能最小化重繪(repaint)和回流(reflow)
A. 需要對(duì)元素進(jìn)行復(fù)雜的操作時(shí),可以先隱藏(display:"none"),操作完成后再顯示
B. 需要?jiǎng)?chuàng)建多個(gè)DOM節(jié)點(diǎn)時(shí),使用DocumentFragment創(chuàng)建完后一次性的加入document
C. 盡量避免用table布局(table元素一旦觸發(fā)回流就會(huì)導(dǎo)致table里所有的其它元素回流)
D. 盡量不要使用 css 屬性簡(jiǎn)寫(xiě),如:用border-width, border-style, border-color代替border
答案
CBBDDD
JS深入
this
- 下列哪種方法不能改變this指向()
A. eval
B. Apply
C. bind
D. call
- 在JavaScript中下面選項(xiàng)關(guān)于this描述正確的是
A. 在使用new實(shí)例化對(duì)象時(shí), this指向這個(gè)實(shí)例對(duì)象
B. 將對(duì)象的方法賦值給變量A。執(zhí)行A()時(shí) 該方法中的this指向這個(gè)對(duì)象。
C. 在函數(shù)定義時(shí),this指向全局變量
D. 在瀏覽器下的全局范圍內(nèi),this指向全局對(duì)象
- 下面有關(guān)JavaScript中call和apply方法的描述,錯(cuò)誤的是?
A. call與apply都屬于Function.prototype的一個(gè)方法,所以每個(gè)function實(shí)例都有call、apply屬性
B. 兩者傳遞的參數(shù)不同,call函數(shù)第一個(gè)參數(shù)都是要傳入給當(dāng)前對(duì)象的對(duì)象,apply不是
C. apply傳入的是一個(gè)參數(shù)數(shù)組,也就是將多個(gè)參數(shù)組合成為一個(gè)數(shù)組傳入
D. call傳入的則是直接的參數(shù)列表。call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象。
答案
AAB
作用域(閉包)
- 內(nèi)存泄漏是 javascript 代碼中必須盡量避免的,以下幾段代碼可能會(huì)引起內(nèi)存泄漏的有()
// (1)
function getName() {
name = 'javascript'
}
getName()
// (2)
const elements = {
button: document.getElementById('button')
};
function removeButton() {
document.body.removeChild(elements.button);
}
removeButton()
// (3)
let timer = setInterval(() => {
const node = document.querySelector('#node')
if(node) {
clearInterval(timer)
}
}, 1000);
A. (1)、(2)、(3)
B. (2)、(3)
C. (1)、(3)
D. (1)、(2)
- 那個(gè)操作不會(huì)造成內(nèi)存泄露
A. 沒(méi)有清理的DOM元素引用
B. 被遺忘的定時(shí)器
C. 事件偵聽(tīng)沒(méi)有移除
D. 局部變量不用時(shí),沒(méi)有設(shè)為null
- 下列關(guān)于閉包理解錯(cuò)誤的是
A. 增加一定的內(nèi)存消耗
B. 使用不當(dāng)可能會(huì)導(dǎo)致內(nèi)存泄漏
C. 可以使用閉包模擬私有方法
D. 閉包會(huì)改動(dòng)對(duì)象的原型鏈
答案
DDD
原型與繼承
- JavaScript實(shí)現(xiàn)繼承的方式,不正確的是:
A. 原型鏈繼承
B. 構(gòu)造函數(shù)繼承
C. 組合繼承
D. 關(guān)聯(lián)繼承
- 所有對(duì)象都有原型
A. T
B. F
- 以下關(guān)于原型鏈的描述正確的是:
A. 通過(guò)原型鏈繼承的屬性和對(duì)象自己定義的屬性等效
B. 通過(guò)原型鏈可以模擬對(duì)象的私有屬性
C. 在對(duì)象上訪問(wèn)不存在的屬性時(shí),會(huì)依次遍歷整條原型鏈
D. 所有 JavaScript 中的對(duì)象都是位于原型鏈頂端的 `Object` 的實(shí)例
答案
DBC
其他
- 以下不屬于前端數(shù)據(jù)存儲(chǔ)方式的是?
A. jsonp
B. cookie
C. localStorage
D. sessionStorage
答案
A
DOM題
事件流
- 將A元素拖拽并放置到B元素中,B元素需要做哪項(xiàng)操作()?
A. event.preventDefault()
B. event.prevent()
C. event.drag()
D. event.drop()
- 以下不支持冒泡的鼠標(biāo)事件為( )?
A. mouseover
B. click
C. mouseleave
D. mousemove
- 在javascript中,用于阻止默認(rèn)事件的默認(rèn)操作的方法是
A. stopDeafault()
B. stopPropagation()
C. preventDefault()
D. preventDefaultEven()
- 事件傳播的三個(gè)階段是什么
目標(biāo) -> 捕獲 -> 冒泡
冒泡 -> 目標(biāo) -> 捕獲
目標(biāo) -> 冒泡 -> 捕獲
捕獲 -> 目標(biāo) -> 冒泡
- 下面有關(guān) javascript 常見(jiàn)事件的觸發(fā)情況,描述錯(cuò)誤的是?
A. onchange:用戶(hù)改變域的內(nèi)容
B. onkeypress:某個(gè)鍵盤(pán)的鍵被按下或按住
C. onmousedown:某個(gè)鼠標(biāo)按鍵被按下
D. onblur:元素獲得焦點(diǎn)
答案
ACCDD
DOM遍歷
- 下列哪項(xiàng)不屬于DOM查找節(jié)點(diǎn)的屬性()?
A. parentObj.firstChild
B. parentObj.children
C. neborNode.previousSibling
D. neborNode.siblings
- DOM中,給父節(jié)點(diǎn)添加子節(jié)點(diǎn)的正確方法為()?
A. appendChild(parentNode,newNode);
B. append(parentNode,newNode);
C. parentNode.append(newNode);
D. parentNode.appendChild(newNode);
- JavaScript中document.getElementById()返回值的類(lèi)型為?
A. Array
B. Object
C. String
D. Function
- DOM中,給父節(jié)點(diǎn)添加子節(jié)點(diǎn)的正確方法為()?
A. appendChild(parentNode,newNode);
B. append(parentNode,newNode);
C. parentNode.append(newNode);
D. parentNode.appendChild(newNode);
答案
DDBD
其他
- DOM元素的以下屬性改變會(huì)導(dǎo)致重排(reflows)的是
outline
visiblity
font-size
background-color
答案
C
BOM題
- setInterval(updateClock,60)的含義是( )?
A. 每隔60秒調(diào)用一次updateClock()
B. 每隔60毫秒調(diào)用一次updateClock()
C. 每隔60分鐘調(diào)用一次updateClock()
D. 每分鐘調(diào)用60次updateClock()
- 使用方法( )可以獲取到地理位置所在的經(jīng)緯度?
A. Geolocation.watchPosition()
B. Geolocation.getCurrentPosition()
C. Geolocation.getPosition()
D. Geolocation.Position()
- setInterval("alert('welcome');",1000);這段代碼的意思是
A. 等待1000秒后,再?gòu)棾鲆粋€(gè)對(duì)話框
B. 等待1秒鐘后彈出一個(gè)對(duì)話框
C. 每隔一秒鐘彈出一個(gè)對(duì)話框
D. 語(yǔ)句報(bào)錯(cuò),語(yǔ)法有問(wèn)題
答案
BBC
ES6題
箭頭函數(shù)
- 下列對(duì)js箭頭函數(shù)描述錯(cuò)誤的是()
A. 箭頭函數(shù)沒(méi)有原型屬性
B. 箭頭函數(shù)不綁定this,會(huì)捕獲其所在的上下文的this值,作為自己的this值
C. 箭頭函數(shù)可以作為構(gòu)造函數(shù),使用new
D. 箭頭函數(shù)不綁定arguments,取而代之用rest參數(shù)解決
- 關(guān)于箭頭函數(shù)下列說(shuō)法錯(cuò)誤的一項(xiàng)是:
A. 函數(shù)體內(nèi)this的指向是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象
B. 箭頭函數(shù)內(nèi)不能使用arguments對(duì)象
C. 箭頭函數(shù)不能使用yield命令
D. 可以使用new創(chuàng)建一個(gè)箭頭函數(shù)的實(shí)例
答案
CD
promise
- 關(guān)于將 Promise.all 和 Promise.race 傳入空數(shù)組的兩段代碼的輸出結(jié)果說(shuō)法正確的是:
Promise.all([]).then((res) => {
console.log('all');
});
Promise.race([]).then((res) => {
console.log('race');
});
A. all 和 race 都會(huì)被輸出
B. all 和 race 都不會(huì)被輸出
C. all 會(huì)被輸出,而 race 不會(huì)被輸出
D. all 不會(huì)被輸出,race 會(huì)被輸出
- 以下方案中,不是用于解決回調(diào)陷阱的的是:
A. Promise
B. Generator
C. async
D. Proxy
- 在 ECMAScript6 中,不屬于promise的狀態(tài)是:
A. Pending
B. Pause
C. Fulfilled
D. Rejected
答案
CDB
解構(gòu)賦值
- 關(guān)于ES6解構(gòu)表達(dá)式,描述正確的是()
let [a,b, c,d, e] = "hello";
A. e = "hello";
B. 其它都為undefined
C. 當(dāng)中 a = "h", b = "e";
D. 語(yǔ)法報(bào)錯(cuò)
答案
C
多選題
JS基礎(chǔ)
- 下面哪些數(shù)組方法會(huì)改變?cè)瓟?shù)組
A. push
B. concat
C. splice
D. map
- 下面可以聲明數(shù)字的js代碼是
A. const a = 0xa1
B. const a = 076
C. const a = 0b21
D. const a = 7e2
- 以下屬于操作符 typeof 的返回值的是:
(1)function
(2) object
(3) null
(4) array
(5) NaN
(6) bigint
(7) regexp
(8) undefined
A. (1)、(2)、(3)、(4)、(5)、(6)、(7)、(8)
B. (1)、(2)、(3)、(8)
C. (1)、(2)、(8)
D. (1)、(2)、(6)、(8)
- 以下()結(jié)果等于字符串string
A. typeof 'string'
B. String('string').toString()
C. 'string'.split('').sort().join('')
D. (function(string){return string})('string')
E. JSON.parse('{"string":"string"}').string
- 下面的等式成立的是?
A. parseInt(46.8) `==` parseFloat(46.8)
B. NaN `!==` NaN
C. isNaN('abc') `==` NaN
D. typeof NaN `===` 'number'
- 以下哪些選項(xiàng)可以將集合A轉(zhuǎn)化為數(shù)組?
A. Array.from(A)
B. [].slice.apply(A)
C. [...A]
D. [].map.call(A, o => o)
- 下列結(jié)果返回 true 的是
A. null == undefined
B. null === undefined
C. null === null
D. NaN == null
E. NaN === NaN
F. Infinity + 1 !== Infinity
答案
AC ABD D ABDE BD ABCD AC
JS深入
- 關(guān)于以下代碼,說(shuō)法正確的有哪些?
function Person() { } var person = new Person();
A. 每一個(gè)原型都有一個(gè)constructor屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)。
B. 每一個(gè)對(duì)象都有一個(gè)prototype屬性。
C. Object.getPrototypeOf(person) === Person.prototype
D. person.constructor === Person
- 下列在 JS 時(shí)間循環(huán)機(jī)制中屬于微任務(wù)(microTask)的是?
A. process.nextTick
B. promise
C. setTimeout
D. setInterval
答案
ACD AB
ES6
- 以下關(guān)于let和const的說(shuō)法中正確的是:
A. let聲明的變量值和類(lèi)型都可以改變
B. const聲明的常量不可以改變
C. 兩者都不存在變量提升,同時(shí)存在暫時(shí)性死區(qū),只能在聲明的位置后面使用
D. const可以先聲明再初始化,可以后賦值
- 下面關(guān)于Promise說(shuō)法正確的是(注意“返回結(jié)果”的意思包含成功或者失敗)
A. Promise.all在所有給定的promise都fulfilled后才返回結(jié)果
B. Promise.race在給定的promise中,某個(gè)fulfilled后才返回結(jié)果
C. promise.then的回調(diào)函數(shù)中,可以返回一個(gè)新的promise
D. 對(duì)于一個(gè)向后臺(tái)獲取數(shù)據(jù)已經(jīng)產(chǎn)生結(jié)果的promise:p1,再次調(diào)用p1.then,不會(huì)去重新發(fā)起請(qǐng)求獲取數(shù)據(jù)
答案
ABC CD
DOM
- 下列關(guān)于使用 JS 修改元素樣式的代碼,正確的有哪些?
document.body.style.['background-color'] = '#fff'
document.body.style.setProperty('background-color', '#fff')
document.body.style = 'background-color': #fff'
document.body.style.fontSize = '14px'
- 下列方法可用于阻止事件冒泡的有
A. event.cancelBubble = true;
B. event.stopPropagation();
C. event.preventDefault();
D. return false;
答案
BCD ABD
填空題
類(lèi)型檢測(cè)
- 在JavaScript中,有var arr = []; typeof arr的結(jié)果為
- 以下使用 typeof 操作符的代碼的輸出結(jié)果為
var x = typeof x
var res = typeof typeof x;
console.log(x, res)
- [typeof null, null instanceof Object]的結(jié)果是什么
- typeof typeof 0
- JavaScript的typeof運(yùn)算符的可能結(jié)果為array?解釋為什么
- 下面代碼的輸出結(jié)果是多少?
var arr = [];
console.log(typeof arr, Object.prototype.toString.call(arr));
- console.log(Object.prototype.toString.call(undefined))
類(lèi)型轉(zhuǎn)換
- 表達(dá)式 "2"+3+4 的值為
- console.log('5' + 3, 5 + '3')
- var a=parseInt(“111辦公室”);alert(a);
- ["0x1", "0x2", "0x3"].map(parseInt) 的結(jié)果
- 在js中執(zhí)行 1+'1'的結(jié)果是?
- 在js中執(zhí)行 parseInt('77',40)的結(jié)果是?
邏輯判斷
- 請(qǐng)給出 [5<6<3,3<2<4] 代碼的運(yùn)行結(jié)果
- (2<3)||(3<2) 表達(dá)式將返回值為
- console.log(true||false&&false, true&&false||true)的輸出結(jié)果是?
其他
- 1 + - + + + - + 1 的結(jié)果是
- [ 'a', ,'b', ,].length 的結(jié)果是
程序題
JS基礎(chǔ)
- 下面兩個(gè)程序的輸出結(jié)果分別是?
// case 1
function showCase(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('Case undefined');
break;
default:
console.log('Case default');
}
}
showCase(new String('A'));
// case 2
function showCase(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('Case undefined');
break;
default:
console.log('Case default');
}
}
showCase(String('A'));
- p標(biāo)簽的的內(nèi)容會(huì)顯示什么?
<html>
<body>
<p id="demo"></p>
<script type="text/javascript">
var x = 10;
var y = "10";
document.getElementById("demo").innerHTML = Boolean(x == y);
</script>
</body>
</html>
- document.write的結(jié)果會(huì)是什么?
function funcA(x){
var temp = 4;
function funcB(y){
document.write( ++x + y + (temp--));
}
funcB(5);
}
funcA(6)
- alert的結(jié)果會(huì)是多少
var varArr = function(i,j,str) {
return j == 0 ? str : varArr(i,--j,(str+= " " + i[j]));
}
var arr = new Array('apple','orange','peach','lime');
var str = varArr(arr,arr.length,"");
alert(str);
- 下面程序的輸出結(jié)果是多少?
function greetingMaker(greeting) {
function addName(name) {
greeting = greeting.split(' ').reverse().join("-");
return greeting + " " + name;
}
return addName;
}
var daytimeGreeting = greetingMaker("Good Day to you");
alert(daytimeGreeting(name));
- 下面程序的輸出結(jié)果是多少?
String.prototype.GetNum = function() {
var regEx = /[^d]/g;
return this.replace(regEx, '');
};
var str = "a1b2c3";
str = str.GetNum();
alert(str);
- 下面程序的輸出結(jié)果是多少?
function sum(a, b) {
return a + b;
}
sum(1, "2");
- 下面程序的輸出結(jié)果是多少?
var str = "我非常喜歡編程";
str.length = 3;
console.log(str);
- 下面程序的輸出結(jié)果是多少?
let number = 0;
console.log(number++);
console.log(++number);
console.log(number);
- 下面程序的輸出結(jié)果是多少?
function nums(a, b) {
if (a > b)
console.log('a is bigger')
else
console.log('b is bigger')
return a + b
}
console.log(nums(4, 2))
console.log(nums(1, 2))
- 下面程序輸出結(jié)果是多少?
function side(arr) {
arr[0] = arr[2];
}
function func1(a, b, c = 3) {
c = 10;
side(arguments);
console.log(a + b + c);
}
function func2(a, b, c) {
c = 10;
side(arguments);
console.log(a + b + c);
}
func1(1, 1, 1);
func2(1, 1, 1);
- 下面代碼的輸出結(jié)果是什么?
var a = 3;
var b = new Number(3);
var c = 3;
console.log(a == b);
console.log(a === b);
console.log(b === c);
- 執(zhí)行下列語(yǔ)句后,a.length的值為?
var a = [];
a.push(1, 2);
a.shift(3, 4);
a.concat([5, 6]);
a.splice(0, 1, 2);
- 下面這幾段代碼分別輸出結(jié)果是多少?為什么?
var a = {}, b = '123', c = 123;
a[b] = 'b';
a[c] = 'c';
console.log(a[b]);
// example 2
var a = {}, b = Symbol('123'), c = Symbol('123');
a[b] = 'b';
a[c] = 'c';
console.log(a[b]);
// example 3
var a = {}, b = {key:'123'}, c = {key:'456'};
a[b] = 'b';
a[c] = 'c';
console.log(a[b]);
- 下面每項(xiàng)的返回值是什么?為什么?
null == undefined
0.1 + 0.2 == 0.3
typeof NaN
typeof Function
typeof Object
typeof {}
'a' + 1
'a' - 1
Function instanceof Object
Object instanceof Function
- 下面程序的輸出結(jié)果是多少?
var array = []
for(var i = 0; i < 3; i++) {
array.push(() => i)
}
var newArray = array.map(el => el())
console.log(newArray)
- 下面程序的輸出結(jié)果是多少?
function a(m, n) {
var b = function (l) {
return l <= m ? l * b(l + 1) : 1;
}
return b(m - n + 1);
}
console.log(a(4, 2));
- 下面程序的輸出結(jié)果是多少?
console.log(typeof undefined == typeof NULL);
console.log(typeof function () {} == typeof class {});
- 執(zhí)行后a和b.age的值分別為
var a = 10
var b = {
age: 11
}
function fn(x,y) {
--y.age;
return --x;
}
fn(a,b)
- 下面程序的執(zhí)行結(jié)果是:
var number = 4;
var numberFactorial = (function (number){
return (number === 0)? 1: number* factorial(number-1)
})(number)
console.log(numberFactorial)
- 下面程序的輸出結(jié)果是:
var array = []
for(var i = 0; i < 3; i++) {
array.push(() => i)
}
var newArray = array.map(el => el())
console.log(newArray)
- 下面程序的輸出結(jié)果是:
function addToList(item, list) {
return list.push(item)
}
const result = addToList("nowcoder", ["hello"])
console.log(result)
- 下面程序的輸出結(jié)果是:
const first = () => { console.log('first'); return false; }
const second = () => { console.log('second'); return true; }
console.log( first() && second() );
console.log( second() || first() );
- 下面代碼的輸出結(jié)果是:
var s='12ab3cd', arr=s.split(/d/);
console.log(arr[3],arr[4])
- 下面程序的輸出結(jié)果是:
function getAge(...args) {
console.log(typeof args);
}
getAge(21);
- 下面程序的輸出結(jié)果是:
var arr=[1,2,3];
arr.push(arr.shift())
console.log(arr[1],arr[2])
JS深入
this指向
題目解析:this指向題目解析及擴(kuò)展[3]
關(guān)于this還可以看看:可能是最好的 this 解析了...
- 下列程序的輸出結(jié)果是多少?為什么?
var x = 1;
var obj = {
x: 3,
fun:function () {
var x = 5;
return this.x;
}
};
var fun = obj.fun;
console.log( obj.fun(), fun() );
- 下列程序的輸出結(jié)果是多少?你能理清楚test函數(shù)的this指向嗎?
var a = 5;
function test() {
a = 0;
alert(a);
alert(this.a);
var a;
alert(a);
}
new test();
- 下列程序的輸出結(jié)果是多少?為什么?
function fun () {
return () => {
return () => {
return () => {
console.log(this.name)
}
}
}
}
var f = fun.call({name: 'foo'})
var t1 = f.call({name: 'bar'})()()
var t2 = f().call({name: 'baz'})()
var t3 = f()().call({name: 'qux'})
- 執(zhí)行以下代碼,輸出結(jié)果分別是多少?
let obj1 = {
a: 1,
foo: () => {
console.log(this.a)
}
}
// log1
obj1.foo()
const obj2 = obj1.foo
// log2
obj2()
- 下面程序的輸出結(jié)果是什么?為什么?
const Person = (name="wang",age=10) => {
this.name = name;
this.age = age;
return this.name +' is '+ this.age + 'years old'
}
let result = new Person('zhang',11)
console.log(result)
- 請(qǐng)表述以下代碼的執(zhí)行結(jié)果和原因
var person = {
age: 18,
getAge: function() {
return this.age;
}
};
var getAge = person.getAge
getAge()
- 請(qǐng)按順序?qū)懗龃蛴〗Y(jié)果,并說(shuō)明原因。
var name = 'global';
var obj = {
name: 'local',
foo: function(){
this.name = 'foo';
}.bind(window)
};
var bar = new obj.foo();
setTimeout(function() {
console.log(window.name);
}, 0);
console.log(bar.name);
var bar3 = bar2 = bar;
bar2.name = 'foo2';
console.log(bar3.name);
- 下面程序的執(zhí)行結(jié)果是:
var obj = {
name:"zhangsan",
sayName:function(){
console.info(this.name);
}
}
var wfunc = obj.sayName;
obj.sayName();
wfunc();
var name = "lisi";
obj.sayName();
wfunc();
- 下面程序的輸出結(jié)果是:
var name='test'
var a = {
name: 'ass',
getName: function() {
return this.name;
}
}
var b = a.getName;
b();
事件循環(huán)
- 下列程序的輸出結(jié)果分別是多少?為什么?
const promiseA = Promise.resolve('a')
promiseA. then((res) => {
console.log(res)
}).then((res) => {
console.log(res)
})
const promiseB = Promise.resolve('b')
promiseB. then((res) => {
console.log(res)
})
promiseB. then((res) => {
console.log(res)
})
- 下面程序的輸出結(jié)果依次是多少?
setTimeout(() => {
console.log(1)
}, 0)
const P = new Promise((resolve, reject) => {
console.log(2)
setTimeout(() => {
resolve()
console.log(3)
}, 0)
})
P.then(() => {
console.log(4)
})
console.log(5)
- 下面程序的輸出結(jié)果是
setTimeout(function(){
console.log(1);
}, 0)
new Promise(function(resolve){
console.log(2);
resolve();
console.log(3);
}).then(function(){
console.log(4);
})
console.log(5);
- 下面程序的輸出結(jié)果是?
(async () => {
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
await new Promise((resolve, reject) => {
console.log(3);
}).then(() => {
console.log(4);
});
console.log(5);
})();
- 下面程序的輸出結(jié)果是:
new Promise((resolve) => {
console.log('1')
resolve()
console.log('2')
}).then(() => {
console.log('3')
})
setTimeout(() => {
console.log('4')
})
console.log('5')
- 下面程序的輸出結(jié)果是:
var p1 = new Promise(function(resolve, reject){
resolve("2")
})
setTimeout(function(){
console.log("1")
},10)
p1.then(function(value){
console.log(value)
})
setTimeout(function(){
console.log("3")
},0)
- 下面程序的輸出結(jié)果是:
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise1');
}).then(function() {
console.log('promise2');
});
- 請(qǐng)表述以下代碼的執(zhí)行結(jié)果和原因
setTimeout(function() {
console.log(1)
},0)
new Promise(function executor(resolve){
console.log(2)
for (var i = 0; i<10000; i++) {
i - 9999 && resolve()
}
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5)
- 在網(wǎng)頁(yè)中有兩個(gè)div塊,html代碼如下
<div class="outer">
<div class="inner"></div>
</div>
對(duì)應(yīng)的js代碼如下:
var outer = document.querySelector('.outer');
var inner = document.querySelector('.inner');
function onClick() {
console.log('click');
setTimeout(function() {
console.log('timeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise');
});
outer.setAttribute('data-random', Math.random());
}
inner.addEventListener('click', onClick);
outer.addEventListener('click', onClick);
當(dāng)點(diǎn)擊class為inner的div塊時(shí),控制臺(tái)依次輸出結(jié)果是什么? 10. 下面程序的輸出結(jié)果是?
(async () => {
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
await new Promise((resolve, reject) => {
console.log(3);
}).then(() => {
console.log(4);
});
console.log(5);
})();
- 下面程序的輸出結(jié)果是:
setTimeout(() => console.log('a'));
Promise.resolve().then(
() => console.log('b’);
).then(
() => Promise.resolve('c').then(
(data) => {
setTimeout(() => console.log('d'));
console.log('f');
return data;
}
)
).then(data => console.log(data));
- 下面程序的輸出結(jié)果是:
console.log('one');
setTimeout(function() { console.log('two'); }, 0);
Promise.resolve()
.then(function() { console.log('three'); })
console.log('four');
- 下面程序的執(zhí)行結(jié)果是:
setTimeout(function () {
console.log(C)
},0)
console.log('D')
new Promise(function(resolve){
console.log('E')
resolve()
console.log('F')
}).then(function() {
console.log('G')
})
console.log('H')
- 有一個(gè)輸出函數(shù)定義如下:
function log(msg, time) {
return new Promise((resolve) => {
setTimeout(() => {
console.log(msg);
resolve();
}, time);
});
}
則下面三段代碼輸出的結(jié)果是:
// 第一段代碼:
(async () => {
for (let i = 0; i < 5; i++) {
await log(i, 1000);
}
})();
// 第二段代碼:
(async () => {
[ 1, 2, 3, 4 ].forEach(async (i) => {
await log(i, 1000);
});
})();
// 第三段代碼:
(async () => {
for (const i of [ 1, 2, 3, 4 ]) {
await log(i, 1000);
}
})();
原型與原型鏈
關(guān)于原型JS:看完這篇文章,徹底了解 “原型” & “this”
傳送門(mén): 原型與原型鏈題目解析[4]
- 下面程序的輸出結(jié)果依次是?
function Fn1(name) {
if(name){
this.name = name;
}
}
Fn1.prototype.name="jack"
let a = new Fn1();
console.log('a:', a.name);
function Fn2(name) {
this.name = name;
}
Fn2.prototype.name="jack"
let b = new Fn2();
console.log('b:', b.name);
- 下面程序的輸出結(jié)果是?
var Foo = (function() {
var x = 0;
function Foo() {}
Foo.prototype.increment = function() {
++x;
console.log(x);
};
return Foo;
})();
var a = new Foo();
a.increment();
a.increment();
var b = new Foo();
a.increment();
- 下面程序的輸出結(jié)果是?
var name = 'Jay'
function Person(name){
this.name = name;
console.log(this.name)
}
var a = Person('Tom')
console.log(name)
console.log(a)
var b = new Person('Michael')
console.log(b)
- 請(qǐng)表述以下代碼的執(zhí)行結(jié)果和原因
class A{}
class B extends A{}
const a = new A()
const b = new B()
a.__proto__
b.__proto__
B. __proto__
B. prototype.__proto__
b.__proto__.__proto__
- 請(qǐng)表述以下代碼的執(zhí)行結(jié)果和原因
function test() {
getName = function() {
Promise.resolve().then(() => console.log(0));
console.log(1);
};
return this;
}
test.getName = function() {
setTimeout(() => console.log(2), 0);
console.log(3);
};
test.prototype.getName = function() {
console.log(4);
};
var getName = function() {
console.log(5);
};
function getName() {
console.log(6);
}
test.getName();
getName();
test().getName();
getName();
new test.getName();
new test().getName();
new new test().getName();
- 請(qǐng)表述以下代碼的執(zhí)行結(jié)果和原因
var tmp = {};
var A = function() {};
A. prototype = tmp;
var a = new A();
A. prototype = {};
var b = Object.create(tmp);
b.constructor = A. constructor;
console.log(a instanceof A);
console.log(b instanceof A);
- 下面程序的執(zhí)行結(jié)果是:
function Foo(){}
Foo.prototype.z = 3;
var obj = new Foo();
console.info(obj.z)
obj.z = 10;
console.info(obj.z);
delete obj.z;
console.info(obj.z);
- 下面程序的執(zhí)行結(jié)果是:
const Book = {
price: 32
}
const book = Object.create(Book);
book.type = 'Math';
delete book.price;
delete book.type;
console.log(book.price);
console.log(book.type);
作用域與預(yù)編譯
- 下面的程序會(huì)報(bào)錯(cuò)嗎?如果不會(huì),輸出結(jié)果分別是多少?
function sayHello() {
console.log(name);
console.log(age);
var name = "Tom";
let age = 18;
}
sayHello();
- 下面的程序i的打印結(jié)果分別是多少?
for (var i = 0; i < 3; i++) {
setTimeout(_ => {
console.log(i)
})
}
for (let i = 0; i < 3; i++) {
setTimeout(_ => {
console.log(i)
})
}
- 下面程序的輸出結(jié)果是:
console.log(a);
var a = 'a';
console.log(b);
let b = 'b';
- 下面程序的輸出結(jié)果是:
var foo = "Hello";
(function(){
var bar = " World";
alert(foo + bar);
})();
alert(foo + bar);
- 下面程序的輸出結(jié)果是:
var a = 10;
(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20;
console.log(a)
})()
- 下面代碼的輸出結(jié)果是:
const a = 10
function runFunction() {
const a = 20
console.log('inside', a)
}
runFunction()
console.log('outside', a)
- 請(qǐng)描述打印結(jié)果并說(shuō)明原因
"use strict"
var name = 'Jay'
var person = {
name: 'Wang',
pro: {
name: 'Michael',
getName: function () {
return this.name
}
}
}
console.log(person.pro.getName)
var people = person.pro.getName
console.log(people())
- 下面程序的結(jié)果是:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script>
var elements = document.getElementsByTagName("li");
for (var i=0;i<elements.length;i++){
elements[i].onclick =function( ){
alert(i);
};
}
- 下面程序的輸出結(jié)果是
compute(10,100);
var compute = function(A,B) {
console.info(A * B) ;
};
function compute(A,B){
console.info(A + B);
}
function compute(A,B){
console.info((A + B)*2);
}
compute(2,10);
- 下面程序的執(zhí)行結(jié)果是:
meili()
function meili() {
console.log("meili")
}
mogu()
var mogu = function() {
console.log("mogu")
}
- 下面兩個(gè)代碼片段輸出結(jié)果有什么區(qū)別?為什么?
// 片段1
check('first');
function check(ars){
console.log(ars);
}
// 片段2
check('second');
var check= function(ars){
console.log(ars);
}
ES6
對(duì)象
- 下面代碼的輸出結(jié)果是?
const student = {name: 'ZhangSan'}
Object.defineProperty(student, 'age', {value: 22})
console.log(student)
console.log(Object.keys(student))
generator
- 下列程序的輸出結(jié)果是多少?為什么?
function * cb(x, y) {
for(let i = Math.ceil(x); i <= y; i++) {
yield i;
}
}
var a = cb(6, 9);
console.log(a.next());
console.log(a.next());
擴(kuò)展運(yùn)算符
- 下面程序的輸出結(jié)果是:
function fn(...args) {
console.log(typeof args);
}
fn(21);
promise
Promise.reject(0)
.catch(e => e)
.catch(e => console.log(e))
class
- 請(qǐng)寫(xiě)出下面ES6代碼編譯后所生成的ES5代碼
class Person {
constructor (name) {
this.name = name;
}
greet () {
console.log(`Hi, my name is ${this.name}`);
}
greetDelay (time) {
setTimeout(() => {
console.log(`Hi, my name is ${this.name}`);
}, time);
}
}
標(biāo)簽?zāi)0?/h1>
- 下面程序的輸出結(jié)果是多少?
function getPersonInfo (one, two, three) {
console.log(one)
console.log(two)
console.log(three)
}
const person = 'Lydia'
const age = 21
getPersonInfo `${person} is ${age} years old`
module
- 請(qǐng)寫(xiě)出index里面的輸出結(jié)果
// module.js
export default () => "Hello world"
export const name = "nowcoder"
// index.js
import * as data from "./module"
console.log(data)
- 有a.js和b.js兩個(gè)文件,請(qǐng)寫(xiě)出b文件中代碼的輸出
// a.js
let a = 1
let b = {}
setTimeout(() => {
a = 2
b.b = 2
}, 100)
module.exports = { a, b }
// b.js
const a = require('./a')
console.log(a.a)
console.log(a.b)
setTimeout(() => {
console.log(a.a)
console.log(a.b)
}, 500)
其他
- 輸出結(jié)果是:
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $ = document.querySelector.bind(document);
const box1 = $('#box1');
const box2 = $('#box2');
box1.addEventListener('click', () =>{
console.log('box1 true');
}, true);
box1.addEventListener('click', () =>{
console.log('box1 false');
}, false);
box2.addEventListener('click', () =>{
console.log('box2 true');
}, true);
box2.addEventListener('click', () =>{
console.log('box2 false');
}, false);
</script>
- 輸出結(jié)果是:
$(function () {
function fn1( value ) {
alert( value );
}
function fn2( value ) {
fn1("A");
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "B" );
callbacks.add( fn2 );
callbacks.fire( "C" );
})
- 實(shí)現(xiàn)在p元素后添加“Hello World!”,則橫線處應(yīng)使用的方法為( )?
<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("<b>Hello World!</b>").______("p");
});
});
</script>
</head>
<body>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>在每個(gè)p元素的結(jié)尾添加內(nèi)容</button>
</body>
</html>
- 輸出結(jié)果是:
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $ = document.querySelector.bind(document);
const box1 = $('#box1');
const box2 = $('#box2');
box1.addEventListener('click', () => {
console.log('box1 true');
}, true);
box1.addEventListener('click', () => {
console.log('box1 false');
}, false);
box2.addEventListener('click', () => {
console.log('box2 true');
}, true);
box2.addEventListener('click', () => {
console.log('box2 false');
}, false);
</script>
- 請(qǐng)選擇下面代碼輸出1的次數(shù)
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
test: function () {
console.log(1)
return this.message
}
},
created: function (){
this.message = 'World'
for (var i = 0; i < 5; i++) {
console.log(this.test)
}
}
})
function getPersonInfo (one, two, three) {
console.log(one)
console.log(two)
console.log(three)
}
const person = 'Lydia'
const age = 21
getPersonInfo `${person} is ${age} years old`
// module.js
export default () => "Hello world"
export const name = "nowcoder"
// index.js
import * as data from "./module"
console.log(data)
// a.js
let a = 1
let b = {}
setTimeout(() => {
a = 2
b.b = 2
}, 100)
module.exports = { a, b }
// b.js
const a = require('./a')
console.log(a.a)
console.log(a.b)
setTimeout(() => {
console.log(a.a)
console.log(a.b)
}, 500)
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $ = document.querySelector.bind(document);
const box1 = $('#box1');
const box2 = $('#box2');
box1.addEventListener('click', () =>{
console.log('box1 true');
}, true);
box1.addEventListener('click', () =>{
console.log('box1 false');
}, false);
box2.addEventListener('click', () =>{
console.log('box2 true');
}, true);
box2.addEventListener('click', () =>{
console.log('box2 false');
}, false);
</script>
$(function () {
function fn1( value ) {
alert( value );
}
function fn2( value ) {
fn1("A");
return false;
}
var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "B" );
callbacks.add( fn2 );
callbacks.fire( "C" );
})
<html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("button").click(function(){
$("<b>Hello World!</b>").______("p");
});
});
</script>
</head>
<body>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>在每個(gè)p元素的結(jié)尾添加內(nèi)容</button>
</body>
</html>
<div id="box1">
<div id="box2">
content
</div>
</div>
<script>
const $ = document.querySelector.bind(document);
const box1 = $('#box1');
const box2 = $('#box2');
box1.addEventListener('click', () => {
console.log('box1 true');
}, true);
box1.addEventListener('click', () => {
console.log('box1 false');
}, false);
box2.addEventListener('click', () => {
console.log('box2 true');
}, true);
box2.addEventListener('click', () => {
console.log('box2 false');
}, false);
</script>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
test: function () {
console.log(1)
return this.message
}
},
created: function (){
this.message = 'World'
for (var i = 0; i < 5; i++) {
console.log(this.test)
}
}
})