前端面试题整理
我們在js的學習中,往往很多東西看過之后,一段時間不用,就忘記了。或者當時就沒有深入的理解,能促使我們不斷深入學習的動力最好的辦法往往參加些面試,能找到自己的不足也能加深之前學的知識點的記憶。
整理最近的一些面試題
(1)請問js有哪些數據數據類型,并畫出內存圖
js有5種簡單的數據類型(也稱為基本數據類型)Undefined、Null、Boolean、Number、String
復雜的數據類型(即引用數據類型) 包含Object對象,array對象和Function,Date等
舉個例子
引用類型數據在棧內存中保存的實際上是對象在堆內存中的引用地址。通過這個引用地址可以快速查找到保存中堆內存中的對象。
obj1賦值給onj2,實際上這個堆內存對象在棧內存的引用地址復制了一份給了obj2,但是實際上他們共同指向了同一個堆內存對象。實際上改變的是堆內存對象。
(2)下面代碼輸出結果
for (var i = 1; i <= 4; i++) {console.log(i)setTimeout(function timer() {console.log(i) // 5,5,5,5,5}, 1000)}答案:// 5,5,5,5,5
(3)下面代碼輸出結果
var foo = "hello"; (function() {var bar = " word"console.log(foo + bar) })() console.log(foo + bar)//答案:報錯bar is not defined
(4)下面代碼輸出結果
var bar = true console.log(bar + 0) //1 console.log(bar + "xyz") //truexyz console.log(bar + true) //2 console.log(bar + false) //1 console.log(undefined == null) //true console.log(1 == true) //true console.log(2 == true) //false console.log(0 == false) //true console.log(0 == '') //true console.log(NaN == NaN) //false console.log([] == false) //true console.log([] == ![]) //true補充一些可能會考到的例子
// Boolean + Number -> 數字相加 true + 1 // 2// Boolean + Boolean -> 數字相加 false + false // 0// Number + String -> 字符串連接 5 + "foo" // "5foo"// String + Boolean -> 字符串連接 "foo" + false // "foofalse"// String + String -> 字符串連接 "foo" + "bar" // "foobar"減法 (-)減法運算符使兩個操作數相減,結果是它們的差值。減法字符串都會試圖轉成數字 -"1"//1 5 - 3 // 2 3 - 5 // -2 "15"-2 //13 "foo" - 3 // NaN'5' + 3 // 53 如果字符在前面,并且后面是加號(+)就是字符串拼接+3 // 3 +"3" // 3 +true // 1 +false // 0 +null // 0 +function(val){ return val;} //NaN(5)假設有這樣一個數組[1,2,3,4,5],現在想要左移或者右移N位,比如左移1位變成[2,3,4,5,1],右移1位變成[5,1,2,3,4],請寫一個函數實現
思路:假如左移的情況,如果左移2位,把原數組的左邊2個元素刪除,并把刪除的2個元素存儲在新建的數組中,最后把原數組刪除后的數組與刪除的數組連接起來,右移的情況也是把右移數量的元素刪除,并把刪除后的元素存儲起來,最后連接。
完整的例子:
(6)有這樣一個URL http://www.baidu.com/item.htm...,請寫一段js程序提取url中的各個GET參數(參數名和參數個數不確定),將其按key-value形式返回到一個json結構中
思路:
1、找出“?”的index 位置(url.indexOf("?"))
2、截取“?”后面的字符串(可以使用slice,substring,substr)
3、使用split把字符串分隔成字符串數組(str.split("&"))
4、循環字符串數組,在循環內部主要代碼
for (i = 0; i < data.length; i++) {var data1 = data[i];data2 = data1.split("=")key = data2[0];value = data2[1];JosnObject.key = value }如有疑問請關注微信公眾號:前端之攻略,此公眾號我也會定期更新前端知識。
總結
- 上一篇: Android 6.0 超级简单的权限申
- 下一篇: 05 前端HTTP协议(图解HTTP)