Javascript 专项练习

 

  • +new Array(017) 输出?( )
  • AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
  • CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。

区别:
1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行

2. CMD 推崇依赖就近,AMD 推崇依赖前置

 

  • 在jsx中需要用className表示html中的class
  • NOSCRIPT标签用来定义在脚本未被执行时的替代内容。也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText

noscript:用以在不支持js的浏览器中显示替代的内容,这个元素可以包含能够出现在文档中任何html元素,script元素除外。包含在noscript元素的内容只有在下列情况下才会显示出来
1.浏览器不支持脚本
2.浏览器支持脚本,但脚本被禁用

  • 下面关于DNS说法正确的是()

正确答案: B C   你的答案: A C D (错误)

DNS的作用是域名和IP地址的相互映射
DNS协议大多数运行在UDP协议之上
DNS协议端口号为53
DNS的默认缓存时间为1小时

解析:

A:DNS就是将域名翻译成IP地址。

B:主要用UDP,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输。

C:DNS协议默认端口号是53。

D:操作系统的DNS缓存:windows DNS缓存的默认值是 MaxCacheTTL,它的默认值是86400s,也就是一天。macOS 严格遵循DNS协议中的TTL。

游览器的DNS缓存:chrome对每个域名会默认缓存60s;IE将DNS缓存30min;Firefox默认缓存时间只有1分钟;Safari约为10S。

 

 

  • 以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:(21)

1

2

3

4

var obj = {"key":"1","value":"2"};

var newObj = obj;    //obj是引用类型,赋值操作是通过地址进行,所以obj和newObj变量的所保存的地址一样,都指向同一个对象

newObj.value += obj.key;  //属性值不是数字而是字符串类型,字符串类型进行‘+’操作是拼接

alert(obj.value);  上面说了obj和newObj变量的所保存的地址一样,都指向同一个对象,所以newObj改变后,obj也会跟着变

 

  • js的按钮禁用

document.getElementByIdx_x_x("btnShow").disabled=true;(这样就把按钮禁用了)

document.getElementByIdx_x_x("btnShow").setAttribute(“disabled”,”true”);

如果要重新开启按钮,则可以让disabled=false;即可

jquery禁用

利用jquery的attr的方法即可

$("#btnShow").attr({"disabled":"disabled"});

如要让按钮恢复可用,可以采用removeAttr方法把disabled属性删除即可。

$("#btnShow").removeAttr("disabled");

 

  • 有以下ES6代码

1

2

3

4

5

function * gen() {

    yield 1;

    yield 2;

    yield 3;

}

下面选项描述正确的是哪个?

正确答案: C   你的答案: B (错误)

gen()执行后返回2
gen()执行后返回undefined
gen()执行后返回一个Generator对象
gen()执行后返回1

function* 声明 (function关键字后跟一个星号)定义了一个 生成器函数 ( generator function ) ,它返回一个  Generator   对象。

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

1

2

3

4

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

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

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

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

解答:122,32,NaN2,NaN

1

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

做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。
因此,这里相当于字符串的合并,即为122.

1

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

第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +"2"相当于1+2=3.
然后和后面的字符串“2”相合并,变成了字符串"32".

1

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

"A"-"B"的运算中,需要先把"A"和"B"用Number函数转换为数值,其结果为NaN,在剪发操作中,如果有一个是NaN,则结果是NaN,因此"A"-"B"结果为NaN。
然后和"2"进行字符串合并,变成了NaN2.

1

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

根据上题所述,"A"-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN。

  • console.log(([])?true:false); 

    console.log(([]==false?true:false)); 

    console.log(({}==false)?true:false

得到的结果分别是什么?(true,true,false)

  • click是鼠标点击事件

contextmenu 是当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事件

 [ 试试在页面中的  中加入onContentMenu="return false" 就可禁止使用鼠标右键了 ]

mouseout 事件会在鼠标指针移出指定的对象时发生。

keydown 事件会在用户按下一个键盘按键时发生,由键盘触发

  • 异或运算:相同取0,不同取1

假设有如下代码,那么a(10)的返回结果是?(5 )

function a(a)

{

  a^=(1<<4)-1;

   return a;

}

解答:1<<左移4位后值位16, a^=16, a=a^16 -> a =10^16,按二进制进行异或运算,转换为10进制为5

 

  • 执行以下程序段后,x的值是( )。

    1

    2

    3

    4

    5

    6

    7

    var x=0;

    switch(++x)

    {

    case 0: ++x;

    case 1: ++x;

    case 2: ++x;

    }

     

    解答:switch条件中出来的是1,case中出来的值是2,由于没有break语句,接着执行第三条,就输出了3

 

 

Javascript 专项练习_第1张图片

前两个执行函数,均是调用了add()方法,这两个函数中的n值在该函数中没有定义,那么在运行时上哪调用,由于这两个函数是闭包,应根据作用域链往外层找,也就是n=4399,第一个执行函数输出值为4400,由于闭包引用了n值,被保留在内存中了,那么同一个函数再次调用时,输出结果就是4401。

第三个执行函数调用了result.n,这时的result的值是一个对象{ n:4399,add:add},这个时候的n调用的是这个对象中的值。

Javascript 专项练习_第2张图片

var foo={n:1};
(function (foo) {
    console.log(foo.n);
    foo.n=3;
    var foo={n:2};
    console.log(foo.n);
})(foo);
console.log(foo.n);

结果: 1 2 3   

// 当参数是引用参数时,在函数内部再次对这个引用类型的参数重写时,会指向一个新的局部对象,和之前的没有关系,这个局部函数执行完后会立即被销毁。

参数是传值参数

var foo=1;
(function (foo) {
    console.log(foo);
    foo=3;
    var foo=2;
    console.log(foo);
})(foo);
console.log(foo);

结果:1 2 1

//当参数是基本数据类型时,在函数内部再对其进行重写时,由于同名的变量不存在重载机制,所以会对其进行覆盖,执行完后也是立即被销毁。

解释:

var foo={n:"我是形参或全局变量"};
(function (foo) {
    console.log(foo.n);
    foo.n="我改变了参数和全局变量";
    var foo={n:"我是局部变量"};
    console.log(foo.n);
})(foo);
console.log(foo.n);

你可能感兴趣的:(专项练习)