JavaScript 十问

这是我在饮水思源BBS WebDevelop 板面出的十道题, 在这里做个备份.

不运行下列代码, 目测一下 console.log 会在控制台输出啥结果. 如果觉得哪句语句会运行失败, 请指出. 如果你愿意的话, 在答案里稍微解释一下原因.

注意: 如果没有特殊说明, 兼容最新版的 FirefoxChrome 即可.

语言基础篇:

1.

var str = '\u104A0';
console.log(str.length);
console.log(String(str) === String(str));
console.log(RegExp(str) === RegExp(str));

2.

console.log(typeof null);
console.log(typeof undefined);
var a;
console.log(a === undefined);
var undefined;
undefined = 1;
console.log(a === undefined);

var b = null;
var null;
null = 1;
console.log(b === null);

3.
我们有一个 ES5 兼容的 JS 环境, 请你完成这段代码, 使变量 a 的值为 global object (即浏览器里的 window), 并判断 console.log 会在控制台输出啥结果

(function(){
'strict mode';
/*
* write your code here
*/
console.log(a.a === a);
})();

4.

(function(){
eval('a=1;');
})();
console.log(a);

(function(){
'use strict';
eval('b=2;');
})();
console.log(b);

5.

(function(){
function testA(){
return function(){
var a = 1;
++a;
return a;
}
}
function testB(){
'use strict';
return function(){
var a = 1;
++a;
return a;
}
}
console.log(testA() === testA());
console.log(testB() === testB());
})();

6.

(function(){
console.log(typeof this)
})();

(function(){
‘use strict’;
console.log(typeof this)
})();

DOM/BOM 篇:

7.
一个容器下有很多子元素, 需要对这些子元素上的事件进行响应. 如果对每一个子元素
进行事件绑定, 代价比较高昂, 故可以将事件绑定到父容器上, 此称为事件代理.

请你分别用 jQuery 和 native dom api 完成一个事件代理的 demo: 当鼠标移到任意 <li> 上时, console.log 它的 .textContent

jQuery: http://jsfiddle.net/PJ6JV/
Native Dom Api: http://jsfiddle.net/GrVVf/

8.
列举你所知道的一切 js 跨域方法, 并稍加解释.

9.
有一个音乐列表页面和一个播放器页面, 要求:
a. 播放器页面正在播放的歌曲名字显示在标题栏, 播放历史显示在页面上.
b. 用户点击播放列表页上的任意项, 如果浏览器已经打开了播放器页面, 则播放器
页面开始播放该项, 否则弹出播放器页面并开始播放.
c. js代码要控制好浏览器, 不能有两个或以上播放器页面.
d. 刷新或关掉重开音乐列表页面, 看功能是否还正常.
d. 刷新或关掉重开播放器页面, 看功能是否还正常.
注: 只要实现窗口控制, 跟 百度音乐 差不多, 不需要真的播放音乐 :)

playlist.html:
<!doctype html>
<html>
<head>
<title>PlayList</title>
</head>
<body>
I'm PlayList;
<ol id="list">
<li>Song #1</li>
<li>Song #2</li>
<li>Song #3</li>
</ol>
<script>
//Write your code here
</script>
</body>
</html>

player.html:
<!doctype html>
<html>
<head>
<title>Now playing: </title>
</head>
<body>
Play history
<ol id="history">
</ol>
<script>
//Write your code here
</script>
</body>
</html>


蛋疼篇:
10. 猜测结果并解释原因.
console.log(++[[[[]]+[[]-[]]]][[[]-[]]]);

本站文章除注明转载外,均为本站原创编译
转载请注明以下信息
文章转载自:鲁夫的爱 [ https://opengg.me/ ]
本文标题:JavaScript 十问
本文地址:https://opengg.me/924/javascript-10-quiz/

《JavaScript 十问》有14个想法

  1. 1.1 utf-8俩字节
    1.2 string恒等只要内容一样就可以
    1.3 实例不行

    2.1 null是个对象
    2.2 undefined在这里是全局变量 typeof返回的是变量类型undefined
    2.3 a没有定义内容 未定义变量默认值引用全局undefined
    2.4 undefined本身不是关键字 可以用var定义
    2.5 undefined大多数现代浏览器是不能赋值的 大大防止了213们出错
    2.7 null是关键字 不能被赋值
    2.8 b能和null恒等

    3.1 var a = window; (= =+ 意义不明…
    3.2 false a是局部变量 而且只是对window的引用

    4.1 eval的执行上下文是全局 (这东西就是个坑…
    4.2 ‘use strict’启用了严格模式 变量必须声明 ***
    4.3 return function 这东西… 怎么可能可以恒等起来呢 好像等都是不可以的- –

    5.1 ‘use strict’下是不可以用this滴 ***

    7.1
    $(‘ul’).mouseenter(function (e) {
    if(e.target.nodeName == ‘LI’)
    {
    console.log(e.target.textContent);
    }
    });

    var element = document.getElementsByTagName(‘ul’);
    element[0].onmousemove = function (e){
    console.log(e.target.tagName);
    if(e.target.tagName == ‘LI’)
    {
    console.log(e.target.textContent);
    }
    };

    8.1 标签 – 插入一个script标签获取需要的数据脚本
    插件 – 借用其他浏览器插件(flash)实现
    代理 – 同域下丢一个转接页
    框架 – 其实和script差不多

    9.x 蛋疼… 懒得那啥了喵 =3=

    10.1 不断替换所有[]为0
    console.log(++[[[[]]+[[]-[]]]][[[]-[]]]);//原始
    console.log(++[[[0]+[0]]][[0]]);//剥掉一层
    console.log(++[[0]][[0]]);//合并一下
    console.log(++[0][0]);//继续扒
    …嗯 应该是1

    注: ***项为作弊项… 答案是后补的… 蛋疼一发…

      1. 基本正确..
        3.1 window 并不是所有的js 环境里都有的.
        3.2 题目有点小瑕疵, 我应该先声明 a 是全局变量的, 这样的话 a.a === a就成立了.
        6.1 可以用this , 只是this 不会再指向global object 了, 避免污染global scope
        function A(){
        ‘use strict’;
        console.log(this);
        }
        A(); //undefined
        A.call(1); //1

  2. 和闺蜜坐公车、上车人特别多、木有坐、站了半天、我抱怨到、以前坐车都有座、就算人多也有人给让座、难道现在生完孩子没魅力了!?闺蜜白了我一眼、说、臭不要脸的、内时候你怀孕、都是给你家孩子面子、现在!你有什么颜值敢要坐?!!呜呜呜、好桑心!

发表评论

电子邮件地址不会被公开。 必填项已用*标注