javascript 面试题
//第一题 这个循环到 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() {
// 因为函数里面又声明了变量bar 根据变量提升所以 bar 是undefined
console.log(bar) // undefined
var bar = 2;
console.log(bar) // 2
}
test()
// 第四题 因为函数比变量提前声明,声明式函数会覆盖普通函数,所以打印foo1
var foo = function () {console.log('foo1')}
function foo() {console.log('foo')}
foo() // foo1
// 第五题请用图示的方式展示下盒模型
/*
标准盒模型: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: ${b}`) // undefined
// b = 2 赋值操作
var b = 2
console.log(`function a b: ${b}`) // 2
}
a()
console.log(`function c b: ${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 函数提升优先于变量提升 所以声明式函数会覆盖普通函数
Foo().getName() //1
getName() // 1 因为 Foo() 调用执行了getName 所以会覆盖外面的getName 方法
new Foo().getName() // 3 Foo() 里面没有静态方法getName 所以会去找原型上的方法
// 数组去重
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 循环 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)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。