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查看html源文件
Nov 08 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
angularjs实现与服务器交互分享
Jun 24 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
详解Vue.use自定义自己的全局组件
Jun 14 Javascript
自己动手封装一个React Native多级联动
Sep 19 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
JavaScript实现表单验证功能
Dec 09 Javascript
Vue 组件注册全解析
Dec 17 Vue.js
JavaScript canvas实现流星特效
May 20 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中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Javascript &amp; DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python如何保证输入键入数字的方法
2019/08/23 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Python random模块的使用示例
2020/10/10 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
公司新年寄语
2014/04/04 职场文书
日语系毕业求职信
2014/07/27 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
网络研修心得体会
2016/01/08 职场文书
详解Python描述符的工作原理
2021/06/11 Python
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python