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多重继承示例
Mar 13 Javascript
Javascript 八进制转义字符(8进制)
Apr 08 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
JavaScript组合拼接字符串的效率对比测试
Nov 06 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
Sep 04 Javascript
vue使用video插件vue-video-player的示例
Oct 03 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数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
python获取目录下所有文件的方法
2015/06/01 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
python实现图片转字符画
2021/02/19 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
中职生自荐信
2013/10/13 职场文书
国税会议欢迎词
2014/01/16 职场文书
上班打牌检讨书
2014/02/07 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
学生自我评语
2015/01/04 职场文书
Python机器学习之基础概述
2021/05/19 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers