無標題文檔

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

翻译自: 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,否则将得到一个空数组( 详细 )。

几款黑体的测试和介绍

黑体是视觉设计师常用的一款字体,特别是针对广告的 Banner 等。根据 维基百科 的相关介绍,有关 黑体的定义 可以认为

黑體与白体相反,没有衬线装饰,筆劃粗壯有力,撇捺等笔画不尖,使人易於閱讀。
黑体是在现代印刷术传入東方後依据西文无衬线体所创造的。所以黑体这个词的范
畴和无衬线字体是类似的。而宋体就可以被称作衬线字体。

「黑体」在日文中被称为ゴシック体(Goshikku-tai,英文:Gothic,直译即「哥特
体」)。

相对于「 白体 」,也有相应的解释

与黑体相反,白体是笔画较细的一种字体。宋体(亦称明朝体)、仿宋体、楷体、
魏书等都是白体。

所以,综上所述。使用黑体的原因之一就是加重信息并容易阅读。这就不难理解为什么 Mac OS X 和 Vista ,都改用黑体作为系统的默认字体。

国内简体中文的黑体,除了众人皆知的 微软雅黑(据说造价非常昂贵),还有其他的一些,在这里简单的列下

  • 华文黑体,这款是苹果机默认的字体
  • 方正黑体,在设计领域使用甚为频繁
  • 中易黑体,也就是我们「传统」 Windows 系统中所带的 SimHei
  • 微软雅黑,Vista 系统默认的字体
  • 文泉驿正黑 ,开源自由的黑体

下面是各款黑体的不同样式,根据不同的抗锯齿程度,显示的效果可能会不一致

https://friable.rocks/_/2008_07_17/1216270805.gif

各款黑体字体文件的大小,从另个侧面能说明这款字体包含了多少的中文字符。

https://friable.rocks/_/2008_07_17/1216270845.png

那么,到底选择哪款黑体合适呢?就个人观点而言,本人偏向于选择 文泉驿 正黑。

原因有两点:其一,就是其自由的版权。其他的黑体有不定的版权限制,要么就是单独作为软件(字体也是软件)销售、要么就是其自身产品的一部分;其二,就是更新的频率,由于有开源社区的支持,处在不断的更新中(并且如果你愿意,也可以加入改进改字体的队伍中)。

于己不利,勿施于人。设计师如果能在不影响设计的前提下,使用无争议的软件(即便是款「小小的字体」),何乐而不为呢?

另,期前已经有「理想主义者」,在几年前就号召大家使用自由字体了( 详细 )。

我的照片

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

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

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

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

分类

搜索

文章