1.下面代码输入的是什么?

var a = {};b = {key:'b'};c = {key:'c'};a[b] = 123;a[c] = 456;console.log(a[b]);
答案:456
首先a声明为一个对象,b和c也是对象,执行a[b] = 123时,b会转成字符串(调用toString()方法)来当作a对象的键,b.toString() === '[object Object]',所以a对象此时是这样的  a = {'[object Object]':123},同理可知,c也是一个对象,所以a[c] = 456执行,其实也是a['[object Object]'] = 456,把原本的123覆盖了,故输出a[b]也就是输出a['[object Object]'],输出456。


  • 用户: 三人行 时间: 2019-02-14 15:44

    666,涨知识了
  • 用户: 小麻烦。 时间: 2019-04-04 10:52

    厉害了
  • 用户: 百斯特 时间: 2019-04-28 13:16

    great

2.有哪些方法可以改变this的指向?

答案:bind call apply (with)

前三个不用多提,最典型的改变this指向,用另一个对象来调用该函数,with不确定算不算,题目所说有哪些"方法",这个"方法"若是指"函数",那么with是一个关键字而不是函数。


    3.以下代码会输出什么?

    (function(x){
        return (function(y){
            console.log(x);
        })(2)
    })(1);
    答案:1
    很简单,一个自执行函数返回了一个自执行函数,所以二者都会顺利执行,外层函数1当作x传入,内层函数2当作2传入,内层函数可以访问外层函数的变量,打印的x就是1 。


      4.产生跨域的原因是什么,如何解决?

      答案:原因:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
      
      解决方案:1、通过jsonp跨域(仅支持get) 2、window.name(大小限制,不安全) 3、CORS


        5.什么是伪数组?如何将其转换为标准数组?

        答案:犹如function内的arguments,具有length属性,按索引方式储存数据,且不具有数组的push,pop等方法,称之为伪数组。使用 var newArray = Array.prototype.slice.call(arguments);即可转换为标准数组。


          6.如何截取一个小数的整数部分?

          A:Math.floor()  B:Math.ceil()  C:Math.round()  D:parseInt()
          答案:A是向下取整,B是向上取整,C是四舍五入,D才是舍去小数截取整数,选D。


            7.<p>哈哈</p> 给以上元素设置margin-bottom : -5px后,会发生什么?

            答案:后面的元素会向上移动5px。