日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

你有必要知道的一些JavaScript 面试题(中)

發布時間:2024/4/17 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你有必要知道的一些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)?//?false

JavaScript能夠準確表示的整數范圍在 -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(2?+?1?+?'3');?/?/‘33’ console.log('3'?+?2?+?1);?//'321'
  • 數字字符串之前存在數字中的正負號(+/-)時,會被轉換成數字

console.log(typeof?'3');???//?string console.log(typeof?+'3');??//number

同樣,可以在數字前添加 ”,將數字轉為字符串

console.log(typeof?3);???//?number console.log(typeof?(''+3));??//string
  • 對于運算結果不能轉換成數字的,將返回 NaN

console.log('a'?*?'sd');???//NaN console.log('A'?-?'B');??//?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 面试题(中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。