[译]Javascript风格要素(二)
作者:秦歌 来源:随网之舞 发布时间:2008-02-29 12:51:00
阅读上一篇:[译]Javascript风格要素(一)
我们使用习惯用法可以使我们的意图更加的清晰和简洁。
使用==
时,当心强制转换
考虑下面函数:
function gw(f) {
if (d.w.sv.checked == true) {
zv = 'on';
} else {
zv = 'off';
}
procframe.location.replace("http://b.www.yahoo.com/module/wtr_tr.php?p=" +
escape(f.p.value) + "&sv=" + zv);
return false;
}
==运算符不应该被用着和true比较值,因为它要执行强制转换。如果我们想确定d.w.sv.checked
是否是布尔值
true
,我们必须用===
运算符。如果我们仅在意一个值是真实存在的不是假的,最好不要用相等运算符。
例如,由于强制转换:1 == true
是真,1 === true
是假。==
运算符隐藏了类型错误。
使用?:运算符选择两值之一
if语句通常被用来从两个值中选择一个。这应该是三元操作符?:
最适合的。
zv = d.w.sv.checked ? 'on' : 'off';
绝不使用隐含的全局变量
变量zv
不是作为一个var
或函数参数来声明的,所以它是一个隐式的全局变量。如果这个页面的另一个函数使用了同样名字的全局变量,则可能得到一个失败的结果。这样的臭虫(bug)是非常难以发现,却很容易避免。这个例子中,我们既可以声明zv
为一个var
,也可以发现它仅仅被使用过一次而整个去掉它。
function gw(f) {
procframe.location.replace("http://b.www.yahoo.com/module/wtr_tr.php?p=" +
escape(f.p.value) + "&sv=" + d.w.sv.checked ? 'on' : 'off');
return false;
}
绝不使用?:运算符选择两种行为之一
我们常质疑那些返回一个常量的函数,但这有时是在浏览器环境下所必需的。
下面我们看一个不正确使用?:
运算符的例子。它常被用于在两个任务间选择。
function u(o, z) {
var em = o.id.substring(1);
var p = d.getElementById('e' + em);
if (p) {
(z == 0) ? p.style.backgroundColor = '#fff' :
p.style.backgroundColor = '#989898';
}
p = d.getElementById('e' + (em - 1));
if (p) {
(z == 0) ? p.style.backgroundColor = '#fff' :
p.style.backgroundColor = '#989898';
}
}
对Z
的判断是模糊不清的。Z
正好等于0
时我们选择#fff
颜色,那么,Z
不等于时?如上所述似乎指明的是前者,但它实际上是后者。在这个例子中幸运的是,我们大概想要的就是后者,所以它不是技术上错误(这次)。但是在文体上只糟糕的。
我们可以用if
代替?:
,但碰巧的是这些值对应的是同一个左值(lvalue),所以我们无需if
就可以改正这个错误。
function u(o, z) {
var em = o.id.substring(1),
p = d.getElementById('e' + em);
if (p) {
p.style.backgroundColor = z ? '#fff' : '#989898';
}
p = d.getElementById('e' + (em - 1));
if (p) {
p.style.backgroundColor = z ? '#fff' : '#989898';
}
}


猜你喜欢
- 小书学习的主要方向是TensorFlow和Pytorch,今天就来安装一下Pytorch。第一步:去官网看看Pytorch官网:(https
- 为了解决传统RNN无法长时依赖问题,RNN的两个变体LSTM和GRU被引入。LSTMLong Short Term Memory,称为长短期
- asp之家注:学习asp,无论是做企业网站还是做个人网站一般都需要用到IP地址。如留言要记录留言者IP,用户登录也经常记录登录的IP,还有站
- 下面是一个实战项目的结果。 #coding: utf-8 import Image,ImageDraw,ImageFont,os,strin
- Pyqt5安装并配置到pycharm方法:教你如何用pycharm安装pyqt5及其相关配置一、简介QLabel是界面中的标签类,继承自QF
- 本文实例为大家分享了python xlsxwriter创建excel图表的具体代码,供大家参考,具体内容如#coding=utf-8 imp
- 今天为大家介绍一个Python绘制一朵漂亮的玫瑰花,用python的turtle库这个绘画库是非常简单的,但是还是需要你测试路径方向,慢慢调
- 本文实例讲述了jquery判断单选按钮radio是否选中的方法。分享给大家供大家参考。具体如下:html代码如下:<input typ
- 前面一篇我们已经把unittest的常用用法都已经讲过了,可能很多小伙伴有个疑问,unittest框架怎么做数据驱动呢?这节我们就来学习一下
- 在python中,“np”一般是指“numpy”库,是第三方库“numpy”的别名。方法:利用命令“import numpy as np”将
- 多属性排序:把需要排序的属性拿出来作为一个 tuple,主要的放前面,次要的放后面。假如某对象有n个属性,那么先按某规则对属性a进行排序,在
- 最近迷上了Python,要说为什么呢?Python语法简单,功能强大,有广泛的第三方库能快速编程实现自己的想法(无需重复去造轮子)。就像某位
- 在JavaScript中四种基本的数据类型:数值(整数和实数)、字符串型(用“”号或‘'括起来的字符或数值)、布尔型(使True或F
- 写在前面这次的爬虫是关于房价信息的抓取,目的在于练习10万以上的数据处理及整站式抓取。数据量的提升最直观的感觉便是对函数逻辑要求的提高,针对
- 自己写PHP也有一年多了,然后编码问题却老是没有得到好的解决,自己的情况是这样的,网页显示完全正常,在phpmyadmin数据库显示中文乱码
- requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如
- 1.lxml库介绍lxml是XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的数据;lxml和正则一样,也是用C语言实现的
- 目录用Python实现定时任务用Python实现定时任务的四种方法利用while True: + sleep()实现定时任务利用thread
- 找到给定二叉树的最小深度最小深度是从根节点到最近叶子节点的最短路径上的节点数量注意:叶子节点没有子树Example:Given binary
- 一场大雪,覆盖了华北、华东。天地连成一片,城市银装素裹,处处诗情画意、人人兴高采烈。朋友圈被雪景图和调侃路滑摔跤的段子刷屏,气氛比过年还要热