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 相关文章推荐
一些技巧性实用js代码小结
Oct 14 Javascript
浅析js中取绝对值的2种方法
Jul 09 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
js脚本获取webform服务器控件的方法
May 16 Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
javascript基本算法汇总
Mar 09 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 Javascript
实现vuex与组件data之间的数据同步更新方式
Nov 12 Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 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 Ajax乱码
2008/04/09 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
浅析javascript的return语句
2015/12/15 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
公司委托书怎么写
2014/08/02 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Python关于OS文件目录处理的实例分享
2021/05/23 Python
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL