javascript 技巧
1.将arguments转化为数组
函数中的预定义变量arguments并非一个真正的数组,而是一个类似数组的对象。
它具有length属性,但是没有slice, push, sort等函数,那么如何使arguments具有这些数组才有的函数呢?
也就是说如何使arguments变成一个真正的数组呢?
|
function args(){ return [].slice.call(arguments) } var m=args(2,5,8) // [2, 5, 8] m.push(10)//可以使用数组方法 console.log(m)// [2, 5, 8,10] |
2.
|
function add() { if(!arguments.callee.count) { //当前运行的函数的count属性。若为false,则设置为0 arguments.callee.count = 0; } return arguments.callee.count++; } add(); // 0 add(); // 1 add(); // 2 // arguments.callee指向当前正在运行的函数。 一般用于匿名函数中 |
3数组中的最大值
var arr = [2, 3, 45, 12, 8];
Math.max.apply(null, arr);// 45
4.修改arguments
function add() {
Array.prototype.push.call(arguments, 123);
//因为arguments不是数组,是类数组,故需要调用数组方法
return arguments;
}
add(100); // [100,123]
/***1-4 数组操作**/
5.判断一个变量是否为undefined
typeof(name2) === ‘undefined’;// true
6.私有变量
var person =(function() {
var _name='1000';
return {
getName:function() { return _name || '2000'; }
}
})();
person.getName(); // "1000"
typeof(person._name); // "undefined"
7.JavaScript没有块级上下文(Scope).即函数才是作用域
for(var i = 0; i < 2; i ++) { }
i; // 2
8.If 中的假:null, undefined, NaN, 0, ‘’, false
9.0.1+0.2 != 0.3
JavaScript将小数作为浮点数对待,所以可能会产生一些四舍五入的错误,比如:
0.1 + 0.2; // 0.30000000000000004
你可以通过toFixed方法指定四舍五入的小数位数:
(0.1 + 0.2).toFixed(); // "0"
(0.1 + 0.2).toFixed(1); // "0.3"
- encodeURI和encodeURIComponent
window.encodeURI函数用来编码一个URL,但是不对这些编码:“:”, “/”, “;”, “?”.
window.encodeURIComponent则会对上述字符进行编码。
我们通过一个例子来说明:
'index.jsp?page='+encodeURI('/page/home.jsp'); // "index.jsp?page=/page/home.jsp"
'index.jsp?page='+encodeURIComponent('/page/home.jsp'); // "index.jsp?page=%2Fpage%2Fhome.jsp"
因此,在对URL进行编码时我们经常会选择 encodeURIComponent。
11.table.innerHTML在IE的table下是只读属性
<table id="table1"> </table>
// works well in Firefox, but fail to work in IE
document.getElementById('table1').innerHTML = "<tr><td>Hello</td><td>World!</td></tr>";
应该:
document.getElementById('table1').innerHTML = "<table><tr><td>Hello</td><td>World!</td></tr></table>";
12.Boolean 和 new Boolean
我们可以把Boolean看做是一个函数,用来产生Boolean类型的值(Literal):
Boolean(false) === false; // true
Boolean('') === false; // true
所以,Boolean(0)和!!0是等价的。
我们也可以把Boolean看做是一个构造函数,通过new来创建一个Boolean类型的对象:
new Boolean(false) === false; // false
new Boolean(false) == false; // true
typeof(new Boolean(false)); // "object"
typeof(Boolean(false)); // "boolean"
13.一元操作符 +在JavaScript中,我们可以在字符串之前使用一元操作符“+”。这将会把字符串转化为数字,如果转化失败则返回NaN。【原理未知】
2 + '1'; // "21"
2 + ( +'1'); // 3
如果把 + 用在非字符串的前面,将按照如下顺序进行尝试转化:
1 调用valueOf()
2 调用toString()
3 转化为数字
+new Date; // 1242616452016
+new Date === new Date().getTime(); // true
+new Date() === Number(new Date) // true
javascript 技巧的更多相关文章
- Javascript技巧
Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如下: ...
- (译文)12个简单(但强大)的JavaScript技巧(二)
原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...
- (译文)12个简单(但强大)的JavaScript技巧(一)
原文连接: 12 Simple (Yet Powerful) JavaScript Tips 我将会介绍和解析12个简单但是强大的JavaScript技巧. 这些技巧所有的JavaScript程序员都 ...
- 21个值得收藏的Javascript技巧
1 Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...
- JavaScript技巧&写法
原文:JavaScript技巧&写法 JavaScript技巧篇: 1>状态机 var state = function () { this.count = 0; this.fun = ...
- 12个非常有用的JavaScript技巧
在这篇文章中,我将分享12个非常有用的JavaScript技巧.这些技巧可以帮助你减少并优化代码. 1) 使用!!将变量转换成布尔类型 有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将 ...
- 原生JavaScript技巧大收集
原生JavaScript技巧大收集 地址:http://itindex.net/detail/47244-javascript
- 原生JavaScript技巧大收集100个
原生JavaScript技巧大收集 1.原生JavaScript实现字符串长度截取function cutstr(str, len) { var temp; var icount = 0; var p ...
- 【转】45个实用的JavaScript技巧、窍门和最佳实践
原文:https://colobu.com/2014/09/23/45-Useful-JavaScript-Tips,-Tricks-and-Best-Practices/ 目录 [−] 列表 第一次 ...
- 一些有趣的Javascript技巧
整理一些刷题时学会的小技巧…… 目录: 即大于0又小于0的变量 String.split() 与 正则表达式 缓存的几种方法 初始化一个数组 即大于0又小于0的变量 问题: 设计一个变量val,使得以 ...
随机推荐
- paramiko模块,线程,进程
关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...
- 关于Js添加版本号
背景 在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就 ...
- RDIFramework.NETV2.9版本 Web新增至14套皮肤风格+三套界面组合(共42套皮肤组合)
客户的心声是最重要的,RDIFramework.NET V2.9版本不仅对WinForm版做了大的调整,Web版也彻彻底底的底翻上的优化了一篇,不仅增加了很多的新功能.新特色,用户最期望的界面风格也进 ...
- RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用 ...
- 献给初学者:谈谈如何学习Linux操作系统
本文出自 “技术成就梦想” 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/569329. 为了能把这篇不错的文章分享给大家.所以请允许我暂时用原创的形式 ...
- 一般处理程序返回json
一般处理程序: public void ProcessRequest(HttpContext context) { string action = con ...
- linux----------纯净的centos7.0上安装lnmp环境的步骤
1.先看下screen -S lnmp 命令是否存在,不存在则安装.这个是个什么东东呢?百度一下( GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接 ...
- android实现程序开机自启动
在安卓中,想要实现app开机自动启动,需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManife ...
- java 笔试题 字符串旋转
package com.shb.java; /** * 取出第一个重复的字符 * @author shaobn * @date 2016-9-28 * @package_name com.shb.ja ...
- win32 公用对话框
## 公用对话框 ## 公用对话框:打开文件.保存文件.选择字体.选择颜色.查找.查找替换... 等等.(我就用过这几个其他的可以猜测用法,给出部分代码,这里我就不一一贴代码了,用到了在完善吧) 用到 ...