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 相关文章推荐
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
&amp;lt;script defer&amp;gt; defer 是什么意思
May 10 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
JQuery中$(document)是什么意思有什么作用
Jul 21 Javascript
javascript事件绑定学习要点
Mar 09 Javascript
javascript如何创建对象
Aug 29 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
Angular浏览器插件Batarang介绍及使用
Feb 07 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
详解npm 配置项registry修改为淘宝镜像
Sep 07 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 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
ThinkPHP之M方法实例详解
2014/06/20 PHP
php通过session防url攻击方法
2014/12/10 PHP
smarty表格换行实例
2014/12/15 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
详解python statistics模块及函数用法
2019/10/27 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
班组长安全职责
2014/01/05 职场文书
秋游活动策划方案
2014/02/16 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
年度评优评先方案
2014/06/03 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python