超实用的javascript代码段30道题目答案

更新时间:2023-03-11 07:41:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

·1·

30个你不可能全会做的题目

你答对了几道?答错了别急,看看答案,看看本书。

有趣的题-答案

1, 以下表达式的运行结果是什么?

[\

A、[“1”, “2”, “3”] B、[1, 2, 3] C、[0, 1, 2] D、其它

答案:D。

解释:parseInt需要2个参数(val, radix),map却传递了 3 个参数(element, index, array)。

2, 以下表达式的运行结果是什么?

[typeof null, null instanceof Object]

A、[\B、[null, false] C、[\D、其它

答案:A。

解释:Javascript规范规定,null和Object都是javascript中的数据类型,其中null表示空引用的一个特殊值,所以typeof null -> 'object' ( ECMA-262的规定 ),但是null值又不是以Object为原型创建出来的,所以null instanceof Object -> 'false'。

3, 以下表达式的运行结果是什么?

[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]

A、报错 B、[9, 0] C、[9, NaN]

· 2·

D、[9, undefined]

答案:A。

解释:根据规范: 在一个空数组上应用reduce会抛初始化错误的异常 TypeError。

4, 以下表达式的运行结果是什么?

var val = 'smtg';

console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');

A、Something B、Nothing C、NaN D、其它

答案:D。

解释:运行结果实际会打印 'Something','+' 操作符的优先级实际上比三元操作符要高。

5, 以下表达式的运行结果是什么?

var name = 'World!'; (function () {

if (typeof name === 'undefined') { var name = 'Jack';

console.log('Goodbye ' + name); } else {

console.log('Hello ' + name); } })();

A、Goodbye Jack B、Hello Jack

C、Goodbye undefined D、Hello undefined

答案:A。

解释:var 声明的作用域在整个 function 中, 但并没有初始化。简单说,浏览器的JavaScript引擎首先会扫描所有的变量声明,并把变量声明上升到作用域的顶部,但是又不会改变变量赋值的位置。因此在实际的代码运行中,由于内层函数域的重新初始化干扰,外层域初始化'name'是假象,这就导致了在'name'未没初始化赋值之前,就判断其值,肯定是'undefined'。

6, 以下表达式的运行结果是什么?

var END = Math.pow(2, 53); var START = END - 100; var count = 0;

for (var i = START; i <= END; i++) { count++; }

console.log(count);

·3·

A、0 B、100 C、101 D、其它

答案:D。

解释:这段代码会进入死循环, 2^53 是javascript中最大的数字, 2^53+1 与 2^53 等同, 因此 i 永远也不会比这个数大。

7, 以下表达式的运行结果是什么?

var ary = [0,1,2]; ary[10] = 10;

ary.filter(function(x) { return x === undefined;});

A、[undefined × 7] B、[0, 1, 2, 10] C、[]

D、[undefined]

答案:C。

解释:Array.prototype.filter 不会应用到缺少的元素上。

8, 以下表达式的运行结果是什么?

var two = 0.2 var one = 0.1 var eight = 0.8 var six = 0.6

[two - one == one, eight - six == two]

A、[true, true] B、[false, false] C、[true, false] D、其它

答案:C。

解释:JavaScript 没有精确的数字, 即便它看上去有时侯能正常工作。

9, 以下表达式的运行结果是什么?

function showCase(value) {

· 4·

switch(value) {

case 'A':

console.log('Case A'); break; case 'B':

console.log('Case B'); break;

case undefined:

console.log('undefined'); break; default:

console.log('Do not know!'); } }

showCase(new String('A'));

A、Case A B、Case B

C、Do not know! D、undefined

答案:C。

解释:switch 使用 === 来枚举,并且 new String(x) !== x。

10,

以下表达式的运行结果是什么?

function showCase2(value) { switch(value) { case 'A':

console.log('Case A'); break; case 'B':

console.log('Case B'); break;

case undefined:

console.log('undefined'); break; default:

console.log('Do not know!'); } }

showCase2(String('A'));

A、Case A B、Case B

C、Do not know! D、undefined

答案:C。

解释:String(x) 不会返回一个 object 但会返回一个 string。

·5·

11,

以下表达式的运行结果是什么?

function isOdd(num) { return num % 2 == 1; }

function isEven(num) { return num % 2 == 0; }

function isSane(num) {

return isEven(num) || isOdd(num); }

var values = [7, 4, '13', -9, Infinity]; values.map(isSane);

A、[true, true, true, true, true] B、[true, true, true, true, false] C、[true, true, true, false, false] D、[true, true, false, false, false]

答案:C。

解释:Infinity % 2 返回 NaN, -9 % 2 返回 -1。

12,

以下表达式的运行结果是什么?

parseInt(3, 8) parseInt(3, 2) parseInt(3, 0)

A、3, 3, 3 B、3, 3, NaN C、3, NaN, NaN D、其它

答案:D。

解释:结果为“3,NaN,3“,3 在2进制中不存在, 很显然结果是NaN, 但0呢? parseInt 猜测你的意思是10, 所有返回是3。

13,

以下表达式的运行结果是什么?

Array.isArray( Array.prototype )

A、true B、false

· 6·

C、报错

D、其它

答案:A。

解释:Array.prototype 是一个 Array,附带了很多属性,Chrome打印结果如图(题1-1):

题1-1 Chrome打印Array.prototype部分截图

14,

以下表达式的运行结果是什么?

var a = [0]; if ([0]) {

console.log(a == true); } else {

console.log(\}

A、true B、false C、”wut” D、其它

答案:B。

解释:[0] 被认为是真的,但跟 true 又不等同

15,

以下表达式的运行结果是什么?

[]==[]

A、true B、false C、报错 D、其它

答案:B。

解释:“==“很有趣吧,如果两边同为对象,但是引用指向不同,故为”false“

16,

以下表达式的运行结果是什么?

·7·

'5' + 3 '5' - 3

A、”53”, 2 B、8, 2 C、报错 D、其它

答案:A。

解释:“Strings”知道怎么用”+“, 但是遇到”-“就会会被转化为数字

17,

以下表达式的运行结果是什么?

1 + - + + + - + 1

A、2 B、1 C、报错 D、其它

答案:A。 解释:有趣的特性

18,

以下表达式的运行结果是什么?

var ary = Array(3); ary[0]=2

ary.map(function(elem) { return '1'; });

A、[2, 1, 1]

B、[“1”, “1”, “1”] C、[2, “1”, “1”] D、其它

答案:D。

解释:结果是[\因为map 只能被初始化过的数组成员调用

19,

以下表达式的运行结果是什么?

function sidEffecting(ary) { ary[0] = ary[2]; }

function bar(a,b,c) { c = 10

sidEffecting(arguments); return a + b + c;

· 8·

}

bar(1,1,1)

A、3 B、12 C、报错 D、其它

答案:D。

解释:结果是 21, 在javascript中变量中 arguments 是个对象,所以arguments 和局部变量所引用的内容是一样的

20,

以下表达式的运行结果是什么?

var a = 111111111111111110000, b = 1111; a + b;

A、111111111111111111111 B、111111111111111110000 C、NaN D、Infinity

答案:B。

解释:不精确的JavaScript数字即会影响小数,也会影响大数

21,

以下表达式的运行结果是什么?

var x = [].reverse; x();

A、[]

B、undefined C、报错 D、window

答案:D。

解释: reverse函数有一个显式的接收者作为this, 函数返回这个this, 此处x的this是window, 全局对象

22,

以下表达式的运行结果是什么?

Number.MIN_VALUE > 0

A、false B、true C、报错

D、其它

答案:B。

解释: Number.MIN_VALUE是能表示的最小的大于0的值

·9·

23,

以下表达式的运行结果是什么?

[1 < 2 < 3, 3 < 2 < 1]

A、[true, true] B、[true, false] C、报错 D、其它

答案:A。

解释: 考隐式转换,我的理解1<2为true转换为1比较1<3肯定为true;3<2为false转换为0比较0<1为true

24,

以下表达式的运行结果是什么?

// the most classic wtf 2 == [[[2]]]

A、true B、false

C、undefined D、其它

答案:A。

解释:每一个对象都被转换成了string,最终成了 \

25,

以下表达式的运行结果是什么?

3.toString() 3..toString() 3...toString()

A、”3”, error, error B、”3”, “3.0”, error C、error, “3”, error D、其它

答案:C。

解释:3.x 是一个合法的语法,结果为\带上尾数xtoString是合法的, 但空字符串不是

· 10·

26,

以下表达式的运行结果是什么?

(function(){

var x = y = 1; })();

console.log(y); console.log(x);

A、1, 1

B、error, error C、1, error D、其它

答案:C。

解释:y自动声明为全局变量

27, 列举一下IE与FF脚本兼容性的问题,例如 :

(1) window.event:

表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象 (2) 获取事件源

IE用srcElement获取事件源,而FF用target获取事件源 (3) 添加,去除事件

IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function) FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”,

function, true)

(4) 获取标签的自定义属性 IE:div1.value或div1[“value”] FF:可用div1.getAttribute(“value”)

(5) document.getElementByName()和document.all[name]

IE;document.getElementByName()和document.all[name]均不能获取div元素 FF:可以

(6) input.type的属性 IE:input.type只读 FF:input.type可读写

(7) innerText textContent outerHTML IE:支持innerText, outerHTML FF:支持textContent

(8) 是否可用id代替HTML元素 IE:可以用id来代替HTML元素 FF:不可以

28,

以下函数有什么问题?如何改进?

·11·

function initButtons() {

var body = document.body, button, i;

for (i = 0; i < 5; i++) {

button = document.createElement(\ button.innerHTML = \ + i;

button.addEventListener(\ (e) { alert(i); }, false);

body.appendChild(button); } }

答案:(1)问题在于点击元素的时候,始终是最后一个被保存的值,因为多次循环的函数,触发事件的i是指向同一个i,可以利用闭包解决这个问题,将遍历的变量作为参数传递进去,这样每个被创建的元素事件都是访问匿名函数语法结构域中的变量了。小提醒,JavaScript的闭包环境由静态的句法结构确定。也就是说,代码一旦写成,我们就知道函数的自由变量同哪些环境里的变量绑定。因此,虽然运行时同一个内函数被调用多次,创建了多个闭包,这些闭包指向的都是同一个环境里的同一个变量。这样同JavaScript规定的闭包语义一致。

(2)改进代码如下

function initButtons() {

var body = document.body, button, i;

for (i = 0; i < 5; i++) {

button = document.createElement(\ button.innerHTML = \

button.addEventListener(\ return function (e) { alert(j); };

}(i), false);

body.appendChild(button); } }

29, 判断一个字符串中出现次数最多的字符,统计出现的次数?

答案:代码如下

var str = \字符例子

strO = {}, //存每个字符出现的次数,有唯一性

max = -1,//出现最多的次数

· 12·

max_key = \出现最多次数的字符

key;

for (var i = 0, l = str.length; i < l; i++) {//过滤每个字符的出现个数 var key = str[i]; if (!strO[key]) { strO[key] = 1; } else {

strO[key]++; } }

for (key in strO) {//寻找次数最多的字符

if (max < strO[key]) { max = strO[key]; max_key = key; } }

console.log(\

30,

请问以下两段代码有什么不同吗?

setTimeout(function() { /* 代码块... */

setTimeout(arguments.callee, 10); }, 10);

setInterval(function(){ /*代码块... */ }, 10);

答案:这两段代码虽然看起来效果差不多,但是本质不一样。第1段回调函数内的setTimeout是等待JavaScript引擎运行之后,才开始设定setTimeout,在上一个设定没有处理完毕之前不会设定下一个定时,理论间隔时间>=10ms;第二段setInterval在设置之后,就会每间隔10ms定时的设置触发线程,理论上两个间隔触发执行的任务是<=10ms

本文来源:https://www.bwwdw.com/article/9nww.html

Top