一些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 相关文章推荐
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
jquery实现的缩略图预览滑块实例
Jun 25 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
Feb 18 Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 Javascript
Vuejs实现购物车功能
Nov 05 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 Javascript
vue组件实现进度条效果
Jun 06 Javascript
vue实现通讯录功能
Jul 14 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
PHP 数字左侧自动补0
2008/03/31 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP实现懒加载的方法
2015/03/07 PHP
php邮件发送的两种方式
2020/04/28 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
is_file和file_exists效率比较
2021/03/14 PHP
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
酒店总经理助理职责
2014/02/12 职场文书
教师网络培训感言
2014/03/09 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
综治工作汇报材料
2014/10/27 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技