無標題文檔

Javascript 每日测试 - 第七期

这期的题目是

请问以下 alert 语句分别弹出的值?

var a = b = c = d = e = f = 1;
alert(a++);
alert(++b); 
alert(++ c);
alert(d ++);
alert(+ +e);
alert(+ + f);

这次主要考验大家对于操作符的理解,特别是一元操作符。让我们先来回顾下 Mozilla 官方 对于操作符方面的解释

下面再理解下 ++ 这个操作符号,通常我们都会将一元操作符直接加在变量的后面。类似的就变成了习惯,以至于对于这样的语句

alert(++                                         b);

就会产生怀疑。但是实际上,他们还是正确的( 来源 )。

「++ c 和 d ++ 只是运算符和运算数之间多了个空格,其实相当于++c和d++,同时建议大家除了 for (var i = 0; i < n; ++i) 这样的应用外,尽量少使用 ++ 和 --, 一来提高代码的可读性,二来避免某些不完善的 code formatter 导致错误」 -- from 小马。

那么上述问题的答案就非常明显了,分别是 1、2、2、1、1、1 。下面,再布置道家庭作业,来自 BT 的 小虎 同志 -_-!

var a = 1;
alert(- + - + + + + - + - - - - - - - + (-+-+-+-+-a++));

请问,上述的 alert 语句会弹出什么值?

中文竖排转换程序

随着闹运会的临近,最近的网络过滤是越发的厉害。最无奈的是, 本人竟然需要代理才能更新自家的 Blog

不知道是从哪个哥们想起的这招 ,使用古文的竖排方式方式关键字过滤。细想一下,这种方式虽然无奈,但总比文章中加入很多的特殊符号要好的多。

不知道在「中文字站起来以后」,会不会引起我们再次的思·想·维·新呢?想必当真如此,胡·适先生泉下也会含笑了。

https://friable.rocks/_/2009_11_05/433745db8278.jpg

好的,回过头来看下这次的 PHP 脚本。这是我根据 YiXia 兄弟的 Wordpress 插件 中的代码而来。

本人主要做了两件事情:格式化代码,「使其看起来舒服些」;第二就是优化代码的算法(现在效率上应该不用在这个类上做过多的考虑)。

在这里可以查看具体的 代码 还有 DEMO ,如果你有兴趣,欢迎 打包下载

Javascript 每日测试 - 第六期

这期的问题是

// 请问如下 alert 语句依次弹出的是什么?
alert('' == '0'); 
alert('' == false); 
alert('0' == 0);
alert('\n' == 0); 
alert(null == false); 
alert(null == undefined); 

此道题目的解释可以参考 《PPK on Javascript》 上的解释 -- form 玉伯:

These are the rules for converting other data types to booleans:

The values null and undefined become false.
The numbers 0 and NaN become false.
An empty string '' becomes false.
All other values become true.

在这里需要注意的是这句

An empty string '' becomes false. 

「empty string」 的含义包括不可见字符(\"\n \t \v\" 等),所以极端上考虑 alert(\"\n \t \v\" == 0) 这个也是 true 。

此道题目的最后答案是 false、true、true、true、false、true 。因此,「在不明确强制类型转换(或者要求判断结果比较高)时,尽量使用 === 替代 == 」 -- form 小马 。

-- Split --

另,外加一道 玉伯 的题目:

var testObj = {
    alert: function() { alert('2'); },
    init: function(el) {
        YAHOO.util.Event.on(el, 'click', function() {
            this.alert('1'); // ?
            (function() { this.alert('1'); })(); // ?
            (function() { this.alert('3'); }).call(this); // ?
        }, null, this);
    }
};

testObj.init(document);
// 问题: 点击 document,alert 依次输出什么?

这道题目需要注意三点:

  1. YAHOO.util.Event.on(el, eventType, fn, obj, override) 最后两个参数的使用
  2. 匿名函数中,this === window
  3. call 和 apply 的使用

最后答案为 「2, 1, 2」,相关参考资料:

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章