另一个javascript小测验(代码集合)


Posted in Javascript onJuly 27, 2011

大家可以测一测自己在这方面知识掌握的程度。
在题后有我参考原博主文章和评论的题目解析,大家竞相拍砖。
The quiz:
1:
1 && 3
2:
1 && "foo" || 0
3:
1 || "foo" && 0
4:
(1,2,3)
5:
x = {shift:[].shift};
x.shift(); 3: x.length;
6:
{foo:1}[0]
7:
[true, false][+true, +false]

8:
++'52'.split('')[0]
9:
a: b: c: d: e: f: g: 1, 2, 3, 4, 5;
10:
{a: 1, b: 2}[["b"]]

1
"b" + 45
12:
{a:{b:2}}
13:
(function(){}())
14:
[1,2,3,4,5][0..toString.length]

15:
({} + 'b' > {} + 'a')

16:
Number.prototype.x = function(){ return this === 123; };
(123).x();
17:
Array(2).join()
18:
vars: var vars = vars;
19:
{ foo = 123 }
20:
x = 1; (function(){return x; var x = 2;}())

2
delete [].length;

22:
RegExp.prototype.toString = function() {return this.source};
/3/-/2/;
23:
{break;4;}
24:
'foo' == new function(){ return String('foo'); };

25:
'foo'.split('') + []

解析:

1: #1. //3 : 1为true,进而&&运算继续执行右边的表达式,结果为3
2: #2. //"foo" : 逻辑运算符,和上面的一样,当运算至"foo"时,表达式已经成功,不再执行||右边的表达式
3: #3. //1 : 1转换为bool为true,直接返回,不再往下执行
4: #4. //3 : 总返回最后一个值
5: #5. //0 : 当x执行过shift()方法后,x就会拥有length属性,并且返回的值就是0
6: #6. //[0] : 两个表达式,返回最后一个表达式的结果
7: #7. //true : 对bool+运算,结果是1或者0于是[true,false][1,0],而这种式子总是取最后一个,[true,false][0]
8: #8. //6 : .运算符优先级大于++运算符,'52'.split('')->['5','2'];取[0]得5;++得6
9: #9. //5 : 忽略掉前面所有的:x 得到:a:1,2,3,4,5 结果:5
10: #10. //SyntaxError。也许你会惊讶,这不是json格式的数据么,肿么会报错?我刚开始也很诧异,实际上这里不是javascript object,而是块级结构的语句执行,因为没有赋值语句。而作为普通语句执行的时候,{a:1;b:2}这样才对。或者a={a:1,b:2}
11: #11. //"b45" : 字符串与数字加法运算,总是返回字符串
12: #12. //2 : 只不过是两个语句块而已,跟第9题实际上是一种情况a:b:2,返回2
13: #13. //undefined : 匿名空函数自执行,由于没有显示return语句,自动返回undefined。
14: #14. //2 : 这个很有意思。分两部分来说,先说0..toString。如果在一个整数后面加".",那么javascript会认为这是浮点数的点,而不是属性调用的点,如果在浮点数后面加点,那么javascript就会认为是属性调用,因为javascript无法区分此时用户到底是想进行。于是0..就变成了调用属性,(这是偶的猜测)这时会把0.转换成对象,调用其toString函数。倘若直接0.toString是会出现语法错误的。你可以测试一下1.1.toString;.0.toString等,都是可以调用的。再说0..toString.length的结果:1,为啥子是1捏,调用函数的length属性返回的结果是函数的形参个数,javascript默认number.toString函数的形参个数为1。所以,[1,2,3,4,5][1]结果是2。
15: #15. //true : {}+"b" 对象和字符串相加 ?> "[object Object]b",之后再进行逻辑比较,"b" > "a"。请不要直接测试{}+"b"这样你会

得到NaN,为什么呢,如果这样的话就是先执行{}这个语句块,再执行 +"b" 结果自然是NaN。

16: #16. //false 严格比较,左边对象,右边数字,类型不匹配。
17: #17. //'','' : 数组使用join后转换为字符串,但是是空数组,所以得到上述结果。
18: #18. //undefined : 都是咸鱼,再怎么翻身,还是咸鱼。都是undefined,最后当然还是undefined。
19: #19. //123 : 块语句执行。跟对象神马的有半点儿毛线关系。
20: #20. //undefined : 据说javascript每引入一个块作用域都会扫描块作用域中的"var",并且将有var 生命的变量值设置为undefined,而不管之前是否有过之类的声明,包括函数体外。
21: #21. //false : 删毛啊,这能删么?【delete only returns false when a property can not be deleted.】

参考:http://perfectionkills.com/understanding-delete/ 文中说的很清楚,内置函数的某些属性是不能被删除的,类似于arguments,

length,函数的局部变量(function(){ var a = 1; return delete a })()等。

22: #22. //1 : 先修改正则表达式的原型链上的toString函数,返回当前正则实例对象的文本形式。然后就是字符串相减了,这时候会自动转换为number进行运算。 23: #23. // SyntaxError : break语句只能放在循环和switch分支语句中 24: #24. //false : 借用Damian Wielgosik非常经典的解释(new function(){ return String('foo'); }).toString() != 'foo'
25: #25. //"f,o,o" : 字符串转换成数组之后和数组相加再转换成字符串,可以找两个数组相加试试,借用Damian Wielgosik的解释

Just consider e.g. [1, 2] + [3, 4] and see how arrays are casted to string.

Javascript 相关文章推荐
js切换div css注意的细节
Dec 10 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
Nov 28 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jQuery替换textarea中换行的方法
Jun 10 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
在node中如何使用 ES6
Apr 22 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
Sep 15 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
jsTree 基于JQuery的排序节点 Bug
Jul 26 #Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 #Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
Jul 26 #Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
Jul 26 #Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 #Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
Jul 26 #Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
Jul 26 #Javascript
You might like
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
python使用cookielib库示例分享
2014/03/03 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python实现两个文件夹的同步
2019/08/29 Python
python3多线程知识点总结
2019/09/26 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
结婚周年感言
2014/02/24 职场文书
房屋租赁意向书
2014/04/01 职场文书
小学毕业寄语大全
2014/04/03 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
学生会个人总结范文
2015/02/15 职场文书
日元符号 ¥
2022/02/17 杂记
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers