一些javascript一些题目的解析


Posted in Javascript onDecember 25, 2010

http://perfectionkills.com/javascript-quiz/

下面是我关于这些题目的,一些关于自己的理解. 如果有什么不同的意见或者见解,欢迎拍砖.

(function(){ 
return typeof arguments; 
})();

这个题目比较简单, 只要大家不觉得 arguments 是 array ,就可以了.
返回是 object.
var f = function g(){ return 23; }; 
typeof g();

翻翻 aiming 的书,会发现里面对function 的解释, 以及几种创建方式有比较完全的描叙的, 这个陷阱,在下面的多个题目中有出现. 小心.
返回是 undefined.
(function(x){ 
delete x; 
return x; 
})(1);

Javascript 的delete, 删除的不是引入或者指向的对象. 而是对象本身.
/*
资料

delete 运算符

从对象中删除一个属性,或从数组中删除一个元素。

delete expression

expression 参数是一个有效的 JScript 表达式,通常是一个属性名或数组元素
所以,这里的形参的改变, 与他是没关系的.
*/
关于delete的具体解析,有园友给出了那个题目部分原本的解释,粗心了没去看,呵呵
http://perfectionkills.com/understanding-delete/
返回 1.

var y = 1, x = y = typeof x; 
x;

这个部分有个小陷阱. 呵呵.
x= undefined , 大家知道. 然后 typeof x, 实际上也就是 typeof "undefined". 呵呵
返回的,当然是 string 了.
(function f(f){ 
return typeof f(); 
})(function(){ return 1; });

恩, 陷阱又来拉.哈哈. 此f 是什么呢? 于形参是没关系的,而且,你也取不到的.
所以, 形参没任何改变.
所以, 返回 number .
var foo = { 
bar: function() { return this.baz; }, 
baz: 1 
}; 
(function(){ 
return typeof arguments[0](); 
})(foo.bar);

这个地方. 主要是考虑的 this的上下文. 传入的是 foo.bar,而非他的父级.
所以, 返回 undefined .
var foo = { 
bar: function(){ return this.baz; }, 
baz: 1 
} 
typeof (f = foo.bar)();

有了上面那个题目, 这个题目也就可以理解了.
所以, 返回 undefined .
var f = (function f(){ return "1"; }, function g(){ return 2; })(); 
typeof f;

这里, 考究的是 () 的返回. () 是返回最后一个.
返回 Number.
var x = 1; 
if (function f(){}) { 
x += typeof f; 
} 
x;

if 里的东西,是肯定可以执行的.因为他是一个实际的存在(object). 非null|underfined的对象,在if下都是可以继续的 . 但是, 和上面的都是一样的原理, f ,却是不存在的.
所以 返回 1undefined.
var x = [typeof x, typeof y][1]; 
typeof typeof x;

这里 ,typeof y ,undefined. 然后, typeof typeof undefined => vtypeof "undefined"
返回 "string".
(function(foo){ 
return typeof foo.bar; 
})({ foo: { bar: 1 } });

呵呵, 这里是个小陷阱, 如果看得太快了容易进去的哦.
简单的描叙下, var fo = {foo:{bar:1}}; function(foo){})(fo);
return typeof foo.bar ==> return typeof fo.bar
所以返回 "undefined".
(function f(){ 
function f(){ return 1; } 
return f(); 
function f(){ return 2; } 
})();

这个题目, 是关于编译器对function的解析了. 于return 没关系. 当他把return 只看成一个string的时候, 编译器已经解析过了所有的function . 与var f = function(){} 这样的是不同的.
所以, 会返回 2.
function f(){ return f; } 
new f() instanceof f;

这个地方理解不够, 瓶子给出的解释貌似看得过去
new f() 得到的是f 的本身, 而不是一个new的对象, 因此,不是f 的实例.
所以, 返回 false.

with (function(x, undefined){}) length;
关于 with 这块, 如果我把 with也看成一个function(和想像alert一样).
那这个length, 就是with的形参长度了.
返回 2.
好了. 看来很多关于js的问题, 其实还是需要梳理下的. aiming 大大的书,关于这部分的讲解很给力. 可以让人绕过一些陷阱和问题.剩下的就是一些自己的测试了.
这些题目并不能够完全的反映出一个人的js能力, 但是至少能够让人知道编译器是怎么样去处理js的

Javascript 相关文章推荐
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
javascript 可以拖动的DIV(二)
Jun 26 Javascript
javascript 简练的几个函数
Aug 29 Javascript
Javascript中valueOf与toString区别浅析
Mar 19 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
Dec 19 Javascript
Jquery解析json数据详解
Dec 26 Javascript
推荐4个原生javascript常用的函数
Jan 12 Javascript
简介JavaScript中Math.cos()余弦方法的使用
Jun 15 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
原生js实现tab选项卡切换
Mar 23 Javascript
vue项目优化之通过keep-alive数据缓存的方法
Dec 11 Javascript
javascript字符串拼接的效率问题
Dec 25 #Javascript
原生javascript获取元素样式属性值的方法
Dec 25 #Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 #Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 #Javascript
浅析javascript闭包 实例分析
Dec 25 #Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 #Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 #Javascript
You might like
图象函数中的中文显示
2006/10/09 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python控制台实现交互式环境执行
2020/06/09 Python
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
C#面试问题
2016/07/29 面试题
考研复习计划
2015/01/19 职场文书
销售会议开幕词
2015/01/28 职场文书
表扬信格式模板
2015/05/05 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL