javascript
你有必要知道的一些JavaScript 面试题(中)
9.實現函數 isInteger(x) 來判斷 x 是否是整數
可以將 x 轉換成10進制,判斷和本身是不是相等即可:
function?isInteger(x)?{?return?parseInt(x,?10)?===?x;? }ES6 對數值進行了擴展,提供了靜態方法 isInteger() 來判斷參數是否是整數:
Number.isInteger(25)?//?true Number.isInteger(25.0)?//?true Number.isInteger(25.1)?//?false Number.isInteger("15")?//?false Number.isInteger(true)?//?falseJavaScript能夠準確表示的整數范圍在 -2^53 到 2^53 之間(不含兩個端點),超過這個范圍,無法精確表示這個值。ES6 引入了Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER這兩個常量,用來表示這個范圍的上下限,并提供了 Number.isSafeInteger() 來判斷整數是否是安全型整數。
10.在下面的代碼中,數字 1-4 會以什么順序輸出?為什么會這樣輸出?
(function()?{console.log(1);?setTimeout(function(){console.log(2)},?1000);?setTimeout(function(){console.log(3)},?0);?console.log(4); })();這個就不多解釋了,主要是 JavaScript 的定時機制和時間循環,不要忘了,JavaScript 是單線程的。詳解可以參考 從setTimeout談JavaScript運行機制。
11.寫一個少于 80 字符的函數,判斷一個字符串是不是回文字符串
function?isPalindrome(str)?{str?=?str.replace(/\W/g,?'').toLowerCase();return?(str?==?str.split('').reverse().join('')); }這個題我在 codewars 上碰到過,并收錄了一些不錯的解決方式,可以戳這里:Palindrome For Your Dome
12.寫一個按照下面方式調用都能正常工作的 sum 方法
console.log(sum(2,3));???//?Outputs?5 console.log(sum(2)(3));??//?Outputs?5針對這個題,可以判斷參數個數來實現:
function?sum()?{var?fir?=?arguments[0];if(arguments.length?===?2)?{return?arguments[0]?+?arguments[1]}?else?{return?function(sec)?{return?fir?+?sec;}}}13.根據下面的代碼片段回答后面的問題
for?(var?i?=?0;?i?<?5;?i++)?{var?btn?=?document.createElement('button');btn.appendChild(document.createTextNode('Button?'?+?i));btn.addEventListener('click',?function(){?console.log(i);?});document.body.appendChild(btn); }1、點擊 Button 4,會在控制臺輸出什么??
2、給出一種符合預期的實現方式
1、點擊5個按鈕中的任意一個,都是輸出5?
2、參考 IIFE。
14.下面的代碼會輸出什么?為什么?
var?arr1?=?"john".split('');?j?o?h?n var?arr2?=?arr1.reverse();?n?h?o?j var?arr3?=?"jones".split('');?j?o?n?e?s arr2.push(arr3); console.log("array?1:?length="?+?arr1.length?+?"?last="?+?arr1.slice(-1)); console.log("array?2:?length="?+?arr2.length?+?"?last="?+?arr2.slice(-1)); 會輸出什么呢?你運行下就知道了,可能會在你的意料之外。MDN 上對于 reverse() 的描述是醬紫的:
Description?
The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array.
reverse() 會改變數組本身,并返回原數組的引用。
slice 的用法請參考:slice
15.下面的代碼會輸出什么?為什么?
console.log(1?+??"2"?+?"2"); console.log(1?+??+"2"?+?"2"); console.log(1?+??-"1"?+?"2"); console.log(+"1"?+??"1"?+?"2"); console.log(?"A"?-?"B"?+?"2"); console.log(?"A"?-?"B"?+?2);輸出什么,自己去運行吧,需要注意三個點:
多個數字和數字字符串混合運算時,跟操作數的位置有關
數字字符串之前存在數字中的正負號(+/-)時,會被轉換成數字
同樣,可以在數字前添加 ”,將數字轉為字符串
console.log(typeof?3);???//?number console.log(typeof?(''+3));??//string對于運算結果不能轉換成數字的,將返回 NaN
這張圖是運算轉換的規則
16.如果 list 很大,下面的這段遞歸代碼會造成堆棧溢出。如果在不改變遞歸模式的前提下修善這段代碼?
var?list?=?readHugeList();var?nextListItem?=?function()?{var?item?=?list.pop();if?(item)?{//?process?the?list?item...nextListItem();} };原文上的解決方式是加個定時器:
var?list?=?readHugeList();var?nextListItem?=?function()?{var?item?=?list.pop();if?(item)?{//?process?the?list?item...setTimeout(?nextListItem,?0);} };解決方式的原理請參考第10題。
掃描二維碼,長白山土特產
轉載于:https://blog.51cto.com/996665552/1900067
總結
以上是生活随笔為你收集整理的你有必要知道的一些JavaScript 面试题(中)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读书笔记 effective c++ I
- 下一篇: jQuery 对AMD的支持(Requi