美文网首页
7-20js 测试题

7-20js 测试题

作者: 小生菜呢 | 来源:发表于2019-07-22 00:14 被阅读0次

    1.如何正确的定义变量

    2.下边哪一项会弹 1?

        A:if('2' < '15') {alert(1)};

        B:if(15 - 15) {alert(1)};

        c:if('2' < '15') {alert(1)} else {alert(2)}

        D:if('5' + 0) {alert(1)}

    正确答案 D

    解析:A选项:字符串比较的时候,会按照Unicode编码比较,而‘1’的Unicode编码小于‘2’的Unicode编码,所以字符串‘1’小于字符串‘2’,‘15’ 和‘2‘比较时,会先比较第0位,而’15‘中的第0位 ’1‘ 事小于’2‘的,则认定’15‘小于’2‘,并不会继续向后比较,所以A和C是错误的

    B选项:数字15-15等于0,0转换成布尔值是false,所以B不成立

    D选项:’5‘和0相加,就是字符串’5‘拼接数字0  得到字符串50‘,非空字符串转成布尔值就是true,所以D是正确的

    3.现有如下html结构

        <ul>

            <li>click me</li>

            <li>click me</li>

            <li>click me</li>

            <li>click me</li>

        </ul>

    运行如下代码:

          var elements = document.getElementsByTagName('li');

           var length = elements.length;

           for(var i = 0; i < length; i++) {

                elements[i].onclick = function() {

                      alert(i)

                 }

             }

    A:依次弹出1,2,3,4

    B:依次弹出0,1,2,3

    C:依次弹出3,3,3,3

    D:依次弹出:4,4,4,4

    正确答案:D

    解析:这里注意 alert(i)是在点击事件中,但是当我们页面可以点击时,循环已经执行完了,所以拿到的结果是循环执行完后的结果:4,4,4,4

    问:为什么点击事件执行时,for循环已经结束?看下图

    问:为什么不是3,3,3,3

    循环的结束条件i<length,也就是i<4, 所以当循环结束的时候,i肯定是等于4的。

    扩展:let 声明变量i 得到的结果为啥是1,2,3,4(有时间再写)

    4.以下输出结果为

    var User = {

            count: 1,

            getCount: function() {

              return this.count

            }

          }

          console.log(User.getCount()) // what?

          var fun = User.getCount

          console.log(fun) // what?

    A 1 undefined ;

    B 1 1 ;

    C undefined 1

    D undefined undefined;

    正确答案:A

    解析:这道题张店考察大家对this指向的理解。

    1.首先User是一个对象,它有两个属性count和getCount。

    count的值是数字1,getCount的值是一个function,

    User.getCount(),当作为对象的方法调用时,this指向当前对象,那么this的指向就是User,

    this.count等于User.count  而函数getCount就是return this.count,

    所以console.log(User.getCount())的结果是1

    2.var fun = User.getCount

      console.log(fun) // what?

    将 User.getCount赋值给 fun

    当运行fun时,并不是作为对象的方法被调用的,那么这个this就是指向window的,但是我们并没有在window里定义count这个变量,那么return this.count  自然就找不到了,所以是undeind

    总结一句:当一个函数(方法)作为一个对象的方法调用时,this指向的是当前对象。其余情况下被调用,this指向的是window。也可以理解为,谁调用(这个方法),this就指向谁。

    5

    正确答案:C

    解析:obj.method

    先看method,这是一个函数,它的主体内容的而第一步就是调用了另一个函数,fn()

    fn()是直接定义在window中的,所以this指向window,而length呢也是定义在window中的,所以打印结果为10.

    往下第二步,arguments[0]()

    arguments呢,是实参的集合,也就是说,传进来几个参数,arguments里就有几个参数  obj.method(fn,1,2)   调用method时传了三个参数,所以arguments就等于{0:fn,1:1,2:2}

    再来看arguments[0],是不是就是 fn    那么arguments[0]()是不是就等于 fn()

    也就是说,fn又被argumens调用了一次,再回过头看fn函数

    function fn(){

    console.log(this.length)

    }

    arguments是实参的集合,它本身是一个对象(类数组),它调用了自己下边的方法,。第4题中说到,作为对象的属性被调用,this就指向当前对象。那么this就是指向的arguments

    那么此时的this.length等于arguments.length

    arguments里有啥?  不是有三个属性吗,有三个属性,不就是arguments的长度吗?所以此时答应console.log(this.length) 得到的结果就是3

    6. 以下代码运行后,结果为

    var i = 0;

    alert( ++i == i++ );

    A: true

    B,false

    C,undefined

    D,NaN

    正确答案:A

    解析:1.这里要注意运算的优先级,先执行++i,此时i变成了1

    再执行i==i,(注意,i++中的++运算优先级最低,会运算完==后再运行++)

    分步骤执行就是 第一步:++i(此时i===1)

    第二步:i==i(1等于1,true)

    第三步i++(此时是2,但是它是已经比较完是否相等后再执行的,所以结果是true)

    最后总结下,此运算顺序就是这样:((++i)==i)++

    7.如下代码输出的结果是什么:

    console.log(1+ "2"+"2");

    console.log(1+ +"2"+"2");

    console.log("A"- "B"+"2");

    console.log("A"- "B"+2);

    A.122 122 NaN NaN

    B.122 32 NaN NaN2

    C.122 32 NaN2 NaN

    D.122 32 NaN2 NaN2

    正确答案:B

    解析:A. 1+’2‘+’2‘  :+碰到字符串就会执行字符串拼接,所以结果是 ’122‘

    B.1+ +’2‘+’2‘: 这里重点注意(+’2‘),这个+号,代表的是正负的正号,正号本身会把字符串转为正常数字,所以就变成了1+2+’2‘ 最终结果为:’32‘

    C:'A'-'B'+'2':-只能用来数字计算,所以’A‘-'B'是NaN,    NaN+'2'会进行字符串转换(拼接)所以结果是NaN2

    D:根据C得到'A'-'B'结果为NaN,NaN+2 这里进行的是数字运算,NaN和任何数字进行运算都是NaN,所以最后结果是:NaN

    8.阅读下列程序,写出 x,y,z 最后的值

    A. 1 2 4

    B. 1 4 4

    C. 4 2 4

    D. 1 1 1

    正确答案:B

    首先这里会进行预解析

    然后再仔细看一下 add 重名了,所以第二个add会覆盖第一个add

    最终变为上图的运行方式

    首先x并没有做任何复制和改变

    而y和z的操作是完全一样的所以最后的结果都是4,也就是答案B:1,4,4

    9. 看下列代码输出什么?

    var foo = "11"+2-"1";

    console.log(foo);

    A: 1121

    B: 131

    C: 111

    D: 112

    正确答案:C

    解析:”11“+2,是字符串拼接结果为”112“,

    在js中减号只能执行剑法运算,所以其他类型会被转化为数字进行运算,也就是112-1 得到结果为111

    10.请给出这段代码的运行结果

    A.1 1

    B.1 2

    C.2 1

    D.2 2

    正确答案:C

    解析:先执行函数中的alert(bb),

    但是函数中声明了形参bb,所以bb=2,知识为局部变量bb重新赋值为2

    并不影响外边的变量,函数外的变量bb依然是1

    11.以下代码的运行结果是

    A. 5 5

    B. undefined,undefined

    C. 5,undefined

    D. 5,Uncaught ReferenceError: a is not defined

    正确答案:C

    解析:这里还是作用域问题,注意:vara=b=5,这是知识给a加了声明,也就是说a是证明在函数内的,b没有声明,没有声明就会变成全局变量(严格模式会报错)

    在匿名函数外打印b,b是全局的,所以结果是5,到那时a是生命在函数内的,并不是全局的,所以a找不到,就报错了。

    12.下面的等式成立的是()

    A, parseInt(12.5) == parseFloat(12.5)

    B, Number('') == parseFloat('')

    C, isNaN('abc') == NaN

    D, typeof NaN === 'number'

    正确答案:D

    解析:A :  parseInt(12.5)结果为 12 ,parseFloat(12.5) 结果为 12.5, 12 == 12.5 结果自然不能成立

    B: Number('')结果为0, parseFloat('')结果为 NaN,结果自然也不相等啊

    C: isNaN('abc') == NaN,只要看到了 NaN 那等式必须不成立

    D:typeof的返回值是个字符串类型。NaN是number类型,typeof NaN就会返回值’number

    ‘typeOf 的 返回值是 数据的类型,他的返回值类型是个字符串,也就是说type( type( Number))是个字符串

    13.JavaScript 定义 var a="40",var b=7,则执行 a%b 会得到()

    A.5

    B."5"

    C.undefined

    D.null

    正确答案:A

    解析:取模会隐士类型转换成数字,结果自然 40%7 = 5

    14.下列写法正确的是?()

    正确答案:A

    解析:一个for循环包含3各部分,第一部分是包含一个变量,第二部门包含循环推出的条件,第三部分是每次循环最后要执行的操作。

    也可以解释为: for 语句的语法 for(初始值;判断条件;自增语句){执行语句}

    B选线,用if明显不对。C选项,每一项用逗号隔开不对,

    D选项也是语法错误。 符合结果的只有A,A也包含fou循环成立的三个部分。

    相关文章

      网友评论

          本文标题:7-20js 测试题

          本文链接:https://www.haomeiwen.com/subject/rnbvlctx.html