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 字符串操作函数
Jul 25 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
关于js new Date() 出现NaN 的分析
Oct 23 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
Jun 05 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
Aug 10 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
React中上传图片到七牛的示例代码
Oct 10 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
vue elementui form表单验证的实现
Nov 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
第十二节--类的自动加载
2006/11/16 PHP
完美解决PHP中文乱码
2009/11/26 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
关于js内存泄露的一个好例子
2013/12/09 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python 私有函数的实例详解
2017/09/11 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
如何写好升职自荐信
2014/01/06 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书