javascript 面試題
//第一題 這個循環(huán)到 j 所以 x = 9 + 9
var x;
for(var i =0,j = 0; i < 6, j < 10;i++,j++){
x = i + j
}
console.log(x) // 18
// 第二題
console.log(`typeOf(NaN): ${typeof(NaN)}`) // number
console.log(`typeOf(null): ${typeof(null)}`) // object
console.log(`typeOf(undefined): ${typeof(undefined)}`) // undefined 因為undefined 是 null 派生的
// 第三題
var bar = 1;
function test() {
// 因為函數(shù)里面又聲明了變量bar 根據(jù)變量提升所以 bar 是undefined
console.log(bar) // undefined
var bar = 2;
console.log(bar) // 2
}
test()
// 第四題 因為函數(shù)比變量提前聲明顶考,聲明式函數(shù)會覆蓋普通函數(shù)翁潘,所以打印foo1
var foo = function () {console.log('foo1')}
function foo() {console.log('foo')}
foo() // foo1
// 第五題請用圖示的方式展示下盒模型
/*
標(biāo)準(zhǔn)盒模型:margin border padding content
IE 5.X, 6 盒模型 margin content 包括(padding border)
*/
// 第七題 作用域的不同和變量提升分別打印出什么
function c() {
var b = 1;
function a() {
// 作用域不同 變量提升 var b
console.log(`function a b: $第岖`) // undefined
// b = 2 賦值操作
var b = 2
console.log(`function a b: $`) // 2
}
a()
console.log(`function c b: $醇疼`) // 1
}
c() // undefined 2 1
// 第八題
function Foo () {
getName = function() {console.log(1)}
return this;
}
Foo.getName = function() {
console.log(2)
}
Foo.prototype.getName = function() {console.log(3)}
var getName = function() {console.log(4)}
function getName() {console.log(5)}
Foo.getName() // 2 取得是Foo.getName
getName() // 4 函數(shù)提升優(yōu)先于變量提升 所以聲明式函數(shù)會覆蓋普通函數(shù)
Foo().getName() //1
getName() // 1 因為 Foo() 調(diào)用執(zhí)行了getName 所以會覆蓋外面的getName 方法
new Foo().getName() // 3 Foo() 里面沒有靜態(tài)方法getName 所以會去找原型上的方法
// 數(shù)組去重
var arr = [1,2,3,4,4,5,6,2,4,5,6];
// es5
for (var i = 0; i < arr.length; i ++) {
for(var j = i + 1; j < arr.length; j++) {
if(arr[i] == arr[j]) {
arr.splice(j, 1)
j--
}
}
}
console.log(arr)
// es6
var arr1 = [1,2,3,4,4,5,6,2,4,5,6];
var setArr = new Set(arr1)
var arr2 = [...setArr]
console.log(arr2)
// 封裝對象深拷貝 有多種方法 1是for in 循環(huán) 2 JSON.stringify() json序列化
function copy(obj) {
var newObj = new Object()
for(var key in obj) {
if(typeof(obj[key]) == 'object') {
if (obj[key] instanceof Array) {
var arr = obj[key]
newObj[key] = [];
for(var i = 0; i < arr.length;i++){
newObj[key].push(copy(arr[i]))
}
}else{
newObj[key] = copy(obj[key])
}
}else {
newObj[key] = obj[key]
}
}
return newObj
}
var obj = {
name: 'jack',
age: 18,
happy: {
like: '最去',
sex: '女'
},
array: [{
title: '我喜歡你',
age: 18
}]
}
var obj1 = copy(obj)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者