1. var a = [1,4,5,2,9];下面求a中最大值正確的是
Math.max(a)
Array.max(a)
Math.max.call(null,a)
Math.max.apply(null,a)
答案:1揖膜、Math.max.apply(null,a)
???2、Math.max(...a)//展開(kāi)運(yùn)算符浩销,ES6新語(yǔ)法
解析:
?JavaScript核心技術(shù)解密
?Math對(duì)象的max()方法购披,用于確認(rèn)一組數(shù)值中的最大值芹敌,接收任意多個(gè)參數(shù)痊远,不接受數(shù)組參數(shù)。
?apply()有兩個(gè)參數(shù)氏捞,第一個(gè)為this指向碧聪,將執(zhí)行的環(huán)境切換到null(默認(rèn)到全局環(huán)境中),把所有參數(shù)都納入數(shù)組變成第二個(gè)參數(shù)液茎。
?call()有多個(gè)參數(shù)逞姿,第一個(gè)為this指向,將執(zhí)行的環(huán)境切換到null(默認(rèn)全局環(huán)境中)捆等,第二個(gè)參數(shù)開(kāi)始滞造,即為參數(shù),
?...a為展開(kāi)運(yùn)算符栋烤,是ES6的新語(yǔ)法谒养,將數(shù)組一個(gè)個(gè)變成max的參數(shù)。
2. 下列代碼明郭,頁(yè)面打開(kāi)后能夠彈出alert(1)的是买窟?
<iframe src=”javascript: alert(1)”></iframe>
<img src=”” onerror=”alert(1)”/>
IE下<s style=”top:expression(alert(1))”></s>
<div onclick=”alert(1)”></div>
答案:
<iframe src=”javascript: alert(1)”></iframe>
<img src=”” onerror=”alert(1)”/>
IE下<s style=”top:expression(alert(1))”></s>
解析:
iframe中使用javascript使用js語(yǔ)句alert(1);
onerror:當(dāng)圖片不存在時(shí)觸發(fā)函數(shù);
expression:
css expression(css表達(dá)式)又稱Dynamic properties(動(dòng)態(tài)屬性)是早期微軟DHTML的產(chǎn)物丰泊,以其可以在Css中定義表達(dá)式(公式)來(lái)達(dá)到建立元素間屬性之間的聯(lián)系等作用,從IE5開(kāi)始得到支持始绍,后因標(biāo)準(zhǔn)瞳购、性能、安全性等問(wèn)題亏推,微軟從IE8 beta2標(biāo)準(zhǔn)模式開(kāi)始学赛,取消對(duì)css expression的支持。
知道的人很少了径簿、就是寫(xiě)兼容ie的頁(yè)面也很少用到罢屈;
3.下哪些表達(dá)式的結(jié)果為true()
undefined == null
isNaN("100")
parseInt("1a") === 1
[] instanceof Array
答案:undefined==null、parseInt("1a")===1篇亭、 []instanceof Array
解析:
1.isNaN()函數(shù)用來(lái)判斷一個(gè)數(shù)是否是NaN;
只有一個(gè)值是NaN或者能被轉(zhuǎn)換為NaN的時(shí)候才返回true
console.log(isNaN('e'));//true,因?yàn)閑可以被轉(zhuǎn)換為NaN
console.log(isNaN('11'));//false,因?yàn)樽址梢员晦D(zhuǎn)換為數(shù)字,不能被轉(zhuǎn)為NaN
console.log(isNaN(null));//false,因?yàn)閚ull可以被轉(zhuǎn)換為0,不能被轉(zhuǎn)為NaN
console.log(isNaN(NaN));// true,NaN返回true
2.對(duì)于parseInt()函數(shù)還有一個(gè)易考點(diǎn),就是利用數(shù)組的下標(biāo),還記得parseInt()函數(shù)的第二個(gè)參數(shù)嗎缠捌?
?2.1 parseInt()函數(shù)的第二個(gè)參數(shù)指的就是進(jìn)制,這個(gè)參數(shù)小于2或者大于36的時(shí)候,都會(huì)返回NaN
console.log(parseInt(1,1));//NaN ,因?yàn)榈诙€(gè)參數(shù)是1表示1進(jìn)制<2,所以錯(cuò)誤
console.log(parseInt(1,2));//1,因?yàn)楸硎径M(jìn)制 =2,在范圍內(nèi)
?2.2 我們一般都是省略這個(gè)參數(shù)的,這個(gè)時(shí)候就是默認(rèn)為10進(jìn)制
console.log(parseInt(99));//99
?2.3 我們第二個(gè)參數(shù)使用0的時(shí)候也是使用十進(jìn)制
console.log(parseInt(99,0));//99
?2.4 如果第一個(gè)參數(shù)前綴使用0x/0X則表示使用16進(jìn)制
console.log(parseInt(0x99));//153=16*9+9
console.log(parseInt(0x99,10));//如果第一個(gè)參數(shù)使用了0x表示十六進(jìn)制,那么第二個(gè)參數(shù)設(shè)置了值也無(wú)效
本題中 1a在parseInt下只有1被識(shí)別,a丟棄译蒂,返回1曼月。
3.instanceof是Java中的二元運(yùn)算符,左邊是對(duì)象柔昼,右邊是類(lèi)哑芹;當(dāng)對(duì)象是右邊類(lèi)或子類(lèi)所創(chuàng)建對(duì)象時(shí),返回true捕透;否則聪姿,返回false。
4. 以下哪些操作會(huì)觸發(fā)Reflow:()
var obj = document.getElementById(“test”);
A.alert(obj.className)
B.alert(obj.offsetHeight)
C.obj.style.height = “100px”
D.obj.style.color = “red”
答案:BC
解析:
reflow(回流)和repaint(重繪)
簡(jiǎn)要:整個(gè)在瀏覽器的渲染過(guò)程中(頁(yè)面初始化乙嘀,用戶行為改變界面樣式末购,動(dòng)畫(huà)改變界面樣式等)reflow(回流)和repaint(重繪) 會(huì)大大影響web性能,尤其是手機(jī)頁(yè)面虎谢。因此我們?cè)陧?yè)面設(shè)計(jì)的時(shí)候要盡量減少reflow和repaint盟榴。
什么是reflow和repaint
reflow:例如某個(gè)子元素樣式發(fā)生改變处嫌,直接影響到了其父元素以及往上追溯很多祖先元素(包括兄弟元素)枫虏,這個(gè)時(shí)候?yàn)g覽器要重新去渲染這個(gè)子元素相關(guān)聯(lián)的所有元素的過(guò)程稱為回流。
reflow:幾乎是無(wú)法避免的「感穑現(xiàn)在界面上流行的一些效果几莽,比如樹(shù)狀目錄的折疊迅办、展開(kāi)(實(shí)質(zhì)上是元素的顯 示與隱藏)等,都將引起瀏覽器的 reflow章蚣。鼠標(biāo)滑過(guò)站欺、點(diǎn)擊……只要這些行為引起了頁(yè)面上某些元素的占位面積、定位方式、邊距等屬性的變化镊绪,都會(huì)引起它內(nèi)部匀伏、周?chē)踔琳麄€(gè)頁(yè)面的重新渲 染。通常我們都無(wú)法預(yù)估瀏覽器到底會(huì) reflow 哪一部分的代碼蝴韭,它們都彼此相互影響著够颠。
repaint:如果只是改變某個(gè)元素的背景色、文 字顏色榄鉴、邊框顏色等等不影響它周?chē)騼?nèi)部布局的屬性履磨,將只會(huì)引起瀏覽器 repaint(重繪)。repaint 的速度明顯快于 reflow
下面情況會(huì)導(dǎo)致reflow發(fā)生
1:改變窗口大小
2:改變文字大小
3:內(nèi)容的改變庆尘,如用戶在輸入框中敲字
4:激活偽類(lèi)剃诅,如:hover
5:操作class屬性
6:腳本操作DOM
7:計(jì)算offsetWidt和offsetHeight
8:設(shè)置style屬性
D只會(huì)repaint而不會(huì)影響到reflow。
5.結(jié)果是?
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}
答案:hi
解析:此題考查的是 JS 的類(lèi)型轉(zhuǎn)換:
if(x) 這里期望 x 是一個(gè)布爾類(lèi)型的原始值驶忌,而 x 是一個(gè)對(duì)象矛辕,任何對(duì)象轉(zhuǎn)為布爾值,都為得到 true(切記付魔!在 JS 中聊品,只有 0,-0几苍,NaN翻屈,"",null妻坝,undefined 這六個(gè)值轉(zhuǎn)布爾值時(shí)伸眶,結(jié)果為 false)。
題目的第二部分刽宪,一定要注意 y = Boolean(0)厘贼,而不是 y = new Boolean(0)。這兩個(gè)有很大區(qū)別纠屋,用 new 調(diào)用構(gòu)造函數(shù)會(huì)新建一個(gè)布爾對(duì)象涂臣,此處沒(méi)有加 new盾计,進(jìn)行的是顯示類(lèi)型轉(zhuǎn)換售担,正如上述第一條所說(shuō),0 轉(zhuǎn)換布爾署辉,結(jié)果為 false族铆,所以此時(shí) y 的值就是 false。如果加了 new哭尝,那么 y 就是一個(gè) Boolean 類(lèi)型的對(duì)象哥攘,執(zhí)行 if(y) 時(shí),對(duì)象轉(zhuǎn)布爾,始終是 true逝淹,所以結(jié)果會(huì)與不加 new 的時(shí)候相反耕姊。
6.如何把 7.25 四舍五入為最接近的整數(shù)?
round(7.25)
rnd(7.25)
Math.rnd(7.25)
Math.round(7.25)
答案:Math.round(7.25)
◎Math.ceil()執(zhí)行向上舍入栅葡,即它總是將數(shù)值向上舍入為最接近的整數(shù)茉兰;
◎Math.floor()執(zhí)行向下舍入,即它總是將數(shù)值向下舍入為最接近的整數(shù)欣簇;
◎Math.round()執(zhí)行標(biāo)準(zhǔn)舍入规脸,即它總是將數(shù)值四舍五入為最接近的整數(shù)(這也是我們?cè)跀?shù)學(xué)課上學(xué)到的舍入規(guī)則)
7. 在 javascript 中,以下返回 false 的選項(xiàng)是
var test=1;typeof test=='number';
var test=1.2;typeof test=='float';
var test=undefined;typeof test=='undefined';
var test={};typeof test=='object';
var test='4399'-0;typeof test=='number';
var test=null;typeof test=='object';
答案:B var test=1.2;typeof test=='float';
解析:js只有number類(lèi)型熊咽, float與整形都用number
typeof
undefined 值未定義
boolean 布爾值
string 字符串
number 數(shù)值(整形和浮點(diǎn))
object 對(duì)象或null
function 函數(shù)
8.var obj = {};
obj.log = console.log;
obj.log.call(console,this);
該代碼在瀏覽器中執(zhí)行莫鸭,輸出的日志結(jié)果是什么?
undefined
window
console
obj
答案:window;
解析:
A.call(B,x,y)
1横殴、改變函數(shù)A的this指向被因,使之指向B;
2、把A函數(shù)放到B中運(yùn)行衫仑,x和y是A函數(shù)的參數(shù)氏身。
這道題為陷阱題:
call將obj.log的this改為了console對(duì)象,這是對(duì)的惑畴,接而將全局的this(window)作為參數(shù)傳遞給console.log()方法蛋欣,于是打印出來(lái)的值便為window。
9. 以下代碼中,為class為test的div對(duì)象設(shè)置紅色背景的正確js代碼為( )
<div class="test"></div>
A如贷、document.getElementsByClassName("test").style.backgroundColor="red";
B陷虎、document.getElementsByClassName("test")[0].style.backgroundColor="red";
C、document.getElementsByClassName("test")[0].style.background-color="red";
D杠袱、document.getElementsByClassName("test").style.background-color="red";
答案:B
解析:在js里面添加的屬性名使用駝峰法尚猿,在css里面使用連接線 除了id和query 其他返回的都是節(jié)點(diǎn)列表
10. 其中 alert 兩次輸出結(jié)果為()
var foo='Hello';
(function(){
var bar='World';
alert(foo+bar);
})();
alert(foo+bar);
答案:hello world報(bào)錯(cuò)
解析:第一個(gè)alert中正常輸出helloworld,最底部的alert由于bar是自執(zhí)行方法內(nèi)的變量楣富,所以沒(méi)有全局中沒(méi)有bar變量凿掂,報(bào)錯(cuò)。
11. 面有關(guān)瀏覽器中使用js跨域獲取數(shù)據(jù)的描述纹蝴,說(shuō)法錯(cuò)誤的是庄萎?
域名、端口相同塘安,協(xié)議不同糠涛,屬于相同的域
js可以使用jsonp進(jìn)行跨域
通過(guò)修改document.domain來(lái)跨子域
使用window.name來(lái)進(jìn)行跨域
答案:A
解析:完全一致的意思是,域名要相同(www.example.com和example.com不同)兼犯,協(xié)議要相同(http和https不同)忍捡,端口號(hào)要相同(默認(rèn)是:80端口集漾,它和:8080就不同)。
1.CORS
CORS(Corss-Origin Resource Sharing,跨資源共享)砸脊,基本思想是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通具篇,從而決定請(qǐng)求或響應(yīng)的成功或失敗。即給請(qǐng)求附加一個(gè)額外的Origin頭部凌埂,其中包含請(qǐng)求頁(yè)面的源信息(協(xié)議栽连、域名和端口),以便服務(wù)器根據(jù)這個(gè)頭部決定是否給予響應(yīng)侨舆。
2.document.domain
將頁(yè)面的document.domain設(shè)置為相同的值秒紧,頁(yè)面間可以互相訪問(wèn)對(duì)方的JavaScript對(duì)象。
注意:
不能將值設(shè)置為URL中不包含的域挨下;
松散的域名不能再設(shè)置為緊繃的域名熔恢。
3.圖像Ping
var img=new Image();
img.onload=img.onerror=function(){
... ...
}
img.src="url?name=value";
請(qǐng)求數(shù)據(jù)通過(guò)查詢字符串的形式發(fā)送,響應(yīng)可以是任意內(nèi)容臭笆,通常是像素圖或204響應(yīng)叙淌。
圖像Ping最常用于跟蹤用戶點(diǎn)擊頁(yè)面或動(dòng)態(tài)廣告曝光次數(shù)。
缺點(diǎn):
只能發(fā)送GET請(qǐng)求愁铺;
無(wú)法訪問(wèn)服務(wù)器的響應(yīng)文本鹰霍,只能用于瀏覽器與服務(wù)器間的單向通信。
4.Jsonp
var script=document.createElement("script");
script.src="url?callback=handleResponse";
document.body.insertBefore(script,document.body.firstChild);
JSONP由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù)
回調(diào)函數(shù)是接收到響應(yīng)時(shí)應(yīng)該在頁(yè)面中調(diào)用的函數(shù)茵乱,其名字一般在請(qǐng)求中指定茂洒。
數(shù)據(jù)是傳入回調(diào)函數(shù)中的JSON數(shù)據(jù)。
優(yōu)點(diǎn):
能夠直接訪問(wèn)響應(yīng)文本瓶竭,可用于瀏覽器與服務(wù)器間的雙向通信督勺。
缺點(diǎn):
JSONP從其他域中加載代碼執(zhí)行,其他域可能不安全斤贰;
難以確定JSONP請(qǐng)求是否失敗智哀。
5.Comet
Comet可實(shí)現(xiàn)服務(wù)器向?yàn)g覽器推送數(shù)據(jù)。
Comet是實(shí)現(xiàn)方式:長(zhǎng)輪詢和流
短輪詢即瀏覽器定時(shí)向服務(wù)器發(fā)送請(qǐng)求荧恍,看有沒(méi)有數(shù)據(jù)更新瓷叫。
長(zhǎng)輪詢即瀏覽器向服務(wù)器發(fā)送一個(gè)請(qǐng)求,然后服務(wù)器一直保持連接打開(kāi)送巡,直到有數(shù)據(jù)可發(fā)送摹菠。發(fā)送完數(shù)據(jù)后,瀏覽器關(guān)閉連接授艰,隨即又向服務(wù)器發(fā)起一個(gè)新請(qǐng)求辨嗽。其優(yōu)點(diǎn)是所有瀏覽器都支持世落,使用XHR對(duì)象和setTimeout()即可實(shí)現(xiàn)淮腾。
流即瀏覽器向服務(wù)器發(fā)送一個(gè)請(qǐng)求糟需,而服務(wù)器保持連接打開(kāi),然后周期性地向?yàn)g覽器發(fā)送數(shù)據(jù)谷朝,頁(yè)面的整個(gè)生命周期內(nèi)只使用一個(gè)HTTP連接洲押。
6.WebSocket
WebSocket可在一個(gè)單獨(dú)的持久連接上提供全雙工、雙向通信圆凰。
WebSocket使用自定義協(xié)議杈帐,未加密的連接時(shí)ws://;加密的鏈接是wss://专钉。
var webSocket=new WebSocket("ws://");
webSocket.send(message);
webSocket.onmessage=function(event){
var data=event.data;
... ....
}
注意:
必須給WebSocket構(gòu)造函數(shù)傳入絕對(duì)URL挑童;
WebSocket可以打開(kāi)任何站點(diǎn)的連接,是否會(huì)與某個(gè)域中的頁(yè)面通信跃须,完全取決于服務(wù)器站叼;
WebSocket只能發(fā)送純文本數(shù)據(jù),對(duì)于復(fù)雜的數(shù)據(jù)結(jié)構(gòu)菇民,在發(fā)送之前必須進(jìn)行序列化JSON.stringify(message))尽楔。
優(yōu)點(diǎn):
在客戶端和服務(wù)器之間發(fā)送非常少的數(shù)據(jù),減少字節(jié)開(kāi)銷(xiāo)第练。
12.以下代碼執(zhí)行時(shí)不會(huì)在控制臺(tái)輸出錯(cuò)誤信息的是:
let a = decodeURIComponent('%');
var a;
a();
function a() {
console.log(a);
}
Promise.reject(123).finally(a => {
console.log(a);
});
var a = 1;
let a = 2;
console.log(a);
答案:B
解析:
A阔馋、decodeURIComponent解碼函數(shù),中間得是一個(gè)url字符串娇掏;不能包含%呕寝,會(huì)報(bào)錯(cuò)。
B婴梧、變量提升與函數(shù)提升壁涎。
C、reject觸發(fā)的是回調(diào)函數(shù)志秃,123會(huì)報(bào)錯(cuò)
D怔球、變量都是var定義的,同名則覆蓋浮还,如果一個(gè)var 一個(gè)let會(huì)報(bào)重復(fù)定義竟坛。兩個(gè)變量都是let定義的同樣會(huì)報(bào)錯(cuò)。
13.
function checkState(){
alert("liyuming");
}
window.setTimeout(checkState(), 10000); //立即被調(diào)用
window.setTimeout(checkState, 10000); // 10s后被調(diào)用
window.setTimeout("checkState()", 10000); //10s后被調(diào)用 注意和第一個(gè)的區(qū)別 有引號(hào)