另一个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 相关文章推荐
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 Javascript
PHP开发者必须掌握的6个关键字
Apr 14 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
JS两种类型的表单提交方法实例分析
Nov 28 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
Sep 26 Javascript
JavaScript封闭函数及常用内置对象示例
May 13 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
Javascript原型链及instanceof原理详解
May 25 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
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Python文件操作基本流程代码实例
2017/12/11 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
Python json格式化打印实现过程解析
2020/07/21 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
消防工作实施方案
2014/06/09 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
个人求职自荐信范文
2015/03/06 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
公司庆典主持词
2015/07/04 职场文书
2019消防宣传标语!
2019/07/10 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
table不让td文字溢出操作方法
2022/12/24 HTML / CSS