Javascript常用小技巧汇总


Posted in Javascript onJune 24, 2015

本文实例讲述了Javascript常用小技巧。分享给大家供大家参考。具体分析如下:

一、True 和 False 布尔表达式

下面的布尔表达式都返回 false:

null
undefined
'' 空字符串
0 数字0

但小心下面的, 可都返回 true:

'0' 字符串0
[] 空数组
{} 空对象

下面段比较糟糕的代码:

while (x != null) {

你可以直接写成下面的形式(只要你希望 x 不是 0 和空字符串, 和 false):

while (x) {

如果你想检查字符串是否为 null 或空:

if (y != null && y != '') {

但这样会更好:

if (y) {

注意: 还有很多需要注意的地方, 如:

Boolean('0') == true
'0' != true
0 != null
0 == []
0 == false
Boolean(null) ==false
null != true
null != false
Boolean(undefined) ==false
undefined != true
undefined != false
Boolean([]) == true
[] != true
[] == false
Boolean({}) == true
{} != true
{} != false
 
二、条件(三元)操作符 (?:)

三元操作符用于替代下面的代码:

if (val != 0) {
 return foo();
} else {
 return bar();
}

你可以写成:

return val ? foo() : bar();

在生成 HTML 代码时也是很有用的:
var html = '';

三、&& 和 ||

二元布尔操作符是可短路的, 只有在必要时才会计算到最后一项.

"||" 被称作为 'default' 操作符, 因为可以这样:

function foo(opt_win) {
 var win;
 if (opt_win) {
  win = opt_win;
 } else {
  win = window;
 }
 // ...
}

你可以使用它来简化上面的代码:

function foo(opt_win) {
 var win = opt_win || window;
 // ...
}

"&&" 也可简短代码.比如:

if (node) {
 if (node.kids) {
  if (node.kids[index]) {
   foo(node.kids[index]);
  }
 }
}

你可以像这样来使用:

if (node && node.kids && node.kids[index]) {
 foo(node.kids[index]);
}

或者:

var kid = node && node.kids && node.kids[index];
if (kid) {
 foo(kid);
}

不过这样就有点儿过头了:

node && node.kids && node.kids[index] && foo(node.kids[index]);

 
四、使用 join() 来创建字符串

通常是这样使用的:

function listHtml(items) {
 var html = '';
 for (var i = 0; i < items.length; ++i) {
 if(i > 0) { html += ', ';
 }
 html += itemHtml(items[i]);
 }
 html +='';
 return html;
}

但这样在 IE 下非常慢, 可以用下面的方式:

function listHtml(items) {
 var html = [];
 for (var i = 0; i < items.length; ++i) {
  html[i] = itemHtml(items[i]);
 }
 return '' + html.join(', ') + '';
}

你也可以是用数组作为字符串构造器, 然后通过 myArray.join('') 转换成字符串.不过由于赋值操作快于数组的 push(), 所以尽量使用赋值操作.

五、遍历 Node List

Node lists 是通过给节点迭代器加一个过滤器来实现的. 这表示获取他的属性, 如 length 的时间复杂度为 O(n),通过 length 来遍历整个列表需要 O(n^2).

var paragraphs = document.getElementsByTagName_r('p');
for (var i = 0; i < paragraphs.length; i++) {
 doSomething(paragraphs[i]);
}

这样做会更好:

var paragraphs = document.getElementsByTagName_r('p');
for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) {
 doSomething(paragraph);
}

这种方法对所有的 collections 和数组(只要数组不包含 falsy 值) 都适用.

在上面的例子中, 也可以通过 firstChild 和 nextSibling 来遍历孩子节点.

var parentNode = document.getElementByIdx_x('foo');
for (var child = parentNode.firstChild; child; child = child.nextSibling) {
 doSomething(child);
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript 密码强弱度检测万能插件
Feb 25 Javascript
新发现一个骗链接的方法(js读取cookies)
Jan 11 Javascript
动态设置form表单的action属性的值的简单方法
May 25 Javascript
Angular.JS学习之依赖注入$injector详析
Oct 20 Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
gulp构建小程序的方法步骤
May 31 Javascript
过滤器vue.filters的使用方法实现
Sep 18 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
Oct 30 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
js实现的倒计时按钮实例
Jun 24 #Javascript
js实现大转盘抽奖游戏实例
Jun 24 #Javascript
jQuery里filter()函数与find()函数用法分析
Jun 24 #Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 #Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 #Javascript
介绍一个简单的JavaScript类框架
Jun 24 #Javascript
jquery分割字符串的方法
Jun 24 #Javascript
You might like
PHP 和 COM
2006/10/09 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Django中的ajax请求
2018/10/19 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
新闻记者实习自我鉴定
2013/09/19 职场文书
医学生实习自荐信
2013/10/01 职场文书
师范学院教师自荐书
2014/01/31 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
广告宣传策划方案
2014/05/21 职场文书
群教班子对照检查材料
2014/08/26 职场文书
鲁迅故里导游词
2015/02/05 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
2015年计划生育责任书
2015/05/08 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
Python序列化模块JSON与Pickle
2022/06/05 Python