無標題文檔

我不在乎 Blog 的统计数据

有朋友问我,「你的 Blog 现在流量多少,有多少人订阅你的 Blog」甚至「你的 Blog 赚钱了吗」 ?碰到这样的问题,我首先就会敷衍,如果对方继续,我甚至会忽视他。

坦白的讲,这些数据我已经很久没有关注(虽然我也加了统计代码)。就我个人而言, 开设 Blog 的目的很简单 ,它只是记录本人观点、技术笔记以及生活的地方。

建议在每天花那么多时间,去了解你的 Blog 统计数据之前,考虑下为什么要这样做。如果你真的没有事情干,你可以做些其他更有意义的事情,比如诅咒你的上司。

其次,不要说什么统计数据会影响写 Blog 的计划。坦白的讲,如果你觉得其他人对你文章的看法很重要,那么将其发到论坛去讨论岂不是更好?

再次,你敢保证这些统计数据是完全真是可靠的吗?比如 RSS 订阅数字的真实度 -- 搞不清楚为什么现在很多的 Blogger 都那么关注这玩意?

总之,你不承认每天看这些数据,其实是自我安慰的一种方式?就个人而言,写些有价值的内容才是持续 Blog 生命力的最根本途径。

「篱式」条件判断(翻译)

翻译自: http://gtc.motiveshq.com/2008/05/safety-fence-for-accessing-properties/

我们已经知道,null 没有任何的属性值,并且无法获取其实体(existence)值。所以 null.property 返回的是错误(error)而不是 undefined 。

考虑下面的代码

if (node.nextSibling.className == ...) {
   ...
}

在 node 或者 node.nextSibling 为空(null)的情况下,会返回错误(error)。所以,通常情况下的解决方案的代码为

if ((node) && (next = node.nextSibling) && ... ) {
   ...
}

那么,当条件判断一多的情况下,代码会形成下面的情况

if (
(node) &&
(node.nextSibling) &&
(node.nextSibling.className == ...)
... ) {
   ...
}

随着判断条件的不断的增加,代码会变得非常的「丑陋」。

有个小的「伎俩」,可以简化条件判断表达式。我们可以增加个空对象({})或者零(0)作为替代

if ( next = (node || 0).nextSibling) ) {
   ...
}

那么,上述的代码就可以这样写

if (((node || 0).nextSibling || 0).className == ...) {
   ...
}

--Split--

就个人而言,上述的从某种角度而言,代码会非常的精简。但日常实际的编码过程中,尤其是多人配合的情况下,这些代码可能会给其他开发人员造成一定的困扰。

正如 小马 所言,如果已经在使用某些框架,需要具体问题具体分析。比如上述的条件判断代码,使用 YUI 编码就可以使用

YAHOO.util.Dom.hasClass(el, className)

显得更加的精简,并且相比上述的代码更容易理解。

Javascript 每日测试 - 第十期

请问以下代码的弹出值?

function testFunction() {
    var args = Array.prototype.slice.call(arguments, 1, 2);
    alert(args);
}

testFunction(1,2,3);

本道题的目的是为了温习三个知识:

  1. arguments 是一个类数组,但不是一个数组
  2. 使用Array.prototype.slice 可以将 arguments 转换为一个数组
  3. slice 方法接受两个参数 start 和 end

使用 Array.prototype.slice 将 arguments 转换为数组可看作是个 hack。我们可以去追根溯源,了解些前因后果。

ECMAScript 规范 94 页对 Array.prototype.slice 有一个备注

The slice function is intentionally generic; it
does not require that its this value be an Array
object.

Therefore it can be transferred to other kinds of
objects for use as a method. Whether the slice

function can be applied successfully to a host object
is implementation-dependent.

Generic 可以理解为 Java 里的泛型 。对数组来说,就是在 JavaScript, 只要一个对象有 length 属性且可用下标的方式取得所包含的元素,那么它就是 Generic 。

所以使用 Array.prototype.slice.call(arguments) 可以得到一个数组, 除 slice 外, 根据测试使用数组的 splice 方法也可以实现类似的效果

Array.prototype.splice.call(arguments, 0, arguments.length)

同时,使用 Array.prototype.slice 时要注意, 第一个参数是 start,第二个参数是 end。 第二个参数可以不指定,那么表示取出全部。但不能为 null 或 undefined,否则将得到一个空数组( 详细 )。

我的照片

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

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

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

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

分类

搜索

文章