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 对象的解释
Nov 24 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
一个JavaScript去除字符串末尾的空白实例代码
Sep 22 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
Nov 18 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
微信小程序url传参写变量的方法
Aug 09 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 Javascript
jquery 验证用户名是否重复代码实例
May 14 jQuery
vue实现鼠标经过动画
Oct 16 Javascript
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
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目录拷贝实现方法
2015/07/10 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
简单了解python模块概念
2018/01/11 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python科学计算之narray对象用法
2019/11/25 Python
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
什么是Web Service?
2012/07/25 面试题
大专生简历的自我评价
2013/11/26 职场文书
单位委托书范本
2014/04/04 职场文书
十佳家长事迹材料
2014/08/26 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
Golang二维切片初始化的实现
2021/04/08 Golang
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android