面试题一

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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。