七个开法者经常忽略或误用的JavaScript基本知识
七个开法者经常忽略或误用的JavaScript基本知识
翻译自 http://tech.pro/tutorial/1453/7-javascript-basics-many-developers-aren-t-using-properly ,我觉得4、5、6条还是蛮有用的哈。
1. String.prototype.replace: /g and /i 标识
让很多新手疑惑的是,JavaScript里的字符串的replace方法不会替换所有匹配的字符,而是只替换第一次匹配的字符。当然熟悉JavaScript的老手知道我们需要一个正则表达式和一个/g标识。
// 错误的用法
str ="David is an Arsenal fan, which means David is great";
str.replace("David","Darren");// "Darren is an Arsenal fan, which means David is great"
// 想要的效果
str.replace(/David/g,"Darren");// "Darren is an Arsenal fan, which means Darren is great"
另一种常犯的错误是当字符串大小写不敏感时不使用 /i 标志来匹配
str.replace(/david/gi,"Darren")// "Darren will always be an Arsenal fan, which means Darren will always be great"
每一个JavaScript开发者都被每一个标志坑过,所以要保证在适合的时候使用这些标志。
2. Array-Like Objects 和 Array.prototype.slice
Array的slice方法主要用来提取数组中的一部分,很多开发者不知道slice方法可以将类数组的对象转换成真正的数组,比如 arguments,NodeLists。
var nodesArr =Array.prototype.slice.call(document.querySelectorAll("div"));// "true" array of DIVs var argsArr =Array.prototype.slice.call(arguments);// changes arguments to "true" array
你甚至可以用slice克隆一个数组:
var clone = myArray.slice(0);// naive clone
Array.prototype.slice
绝对是JavaScript世界中的精华,即时JS熟手也不一定知道它全部的威力。
3. Array.prototype.sort
Array sort
方法被广泛使用,很多开发者以为sort方法做这样的事情:
[1,3,9,2].sort();// Returns: [1, 2, 3, 9]
这样是对的,但是sort有更强大的用法,像这样:
[
{ name: "Robin Van PurseStrings", age: 30 },
{ name: "Theo Walcott", age: 24 },
{ name: "Bacary Sagna", age: 28 }
].sort(function(obj1, obj2) {
// Ascending: first age less than the previous
return obj1.age - obj2.age;
});
// Returns:
// [
// { name: "Theo Walcott", age: 24 },
// { name: "Bacary Sagna", age: 28 },
// { name: "Robin Van PurseStrings", age: 30 }
// ]
4. Array 长度截断
没有一个开发者没被JavaScript的传递对象引用的特性坑过,常常这样来清空一个数组,但却错误的创建了一个新的数组。
var myArray = yourArray =[1,2,3];// :(
myArray =[];// "yourArray" 还是 [1, 2, 3]
// 正确的方法,保持引用
myArray.length =0;// "yourArray" and "myArray" 都变成了 []
5. push方法来合并数组
我在第二条展示了Array的slice方法的强大能力,所以push方法有这样的能力你也不会见怪了。这次我们用push方法来合并数组
var mergeTo =[4,5,6];
var mergeFrom =[7,8,9];
Array.prototype.push.apply(mergeTo, mergeFrom);
mergeTo;// is: [4, 5, 6, 7, 8, 9]
6. 高效的特性检测或者属性检测
我们常常这样来检测一个浏览器的特性:
if(navigator.geolocation){
// Do some stuff
}
当然,这能正常工作,但它不是很高效。因为对象的方法检测在浏览器中可能会导致分配资源,上面的代码在某些浏览器曾导致内存泄漏。更好的方法检测对象的key:
if("geolocation"in navigator){
// Do some stuff
}
这样的key检测使用简单并且避免了很多问题,比如一个属性的值是false,那么你的检测会失败,即使key存在。
7. Event preventDefault 和 stopPropagation
当元素被点击时(比如链接),我们经常触发自己的函数。显然,我们不希望浏览器继续访问这个链接,所以我们使用JavaScript库的Event.stop方法:
$("a.trigger").on("click",function(e){
e.stop();
// Do more stuff
});
这个方法的问题在于它不仅阻止了浏览器的默认行为,而且阻止了事件冒泡。也就是说,其他的事件监听器不会监听到这个事件。
所以最好是直接使用preventDefault方法。
一些开发者可能会说:“我知道这些!”,但是他们也常常犯这样的错误,所以不要忽略这些小的细节,它们可能造成大的差异。
附:preventDefault与return false 的区别 http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false
七个开法者经常忽略或误用的JavaScript基本知识的更多相关文章
- FreeSql (七)插入数据时忽略列
var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...
- JavaScript开发者常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点(转)
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- JavaScript 开发者经常忽略或误用的七个基础知识点
JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...
- (转)JavaScript 开发者经常忽略或误用的七个基础知识点
英文原文:7 JavaScript Basics Many Developers Aren't Using (Properly) JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和 ...
- 七牛开发文档php
http://developer.qiniu.com/docs/v6/sdk/php-sdk.html#overview http://developer.qiniu.com/docs/v6/sdk/ ...
- javaScript 基础知识汇总(七)
1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array(); let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...
- Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况
由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...
- 阿里云CentOS自动备份MySql 8.0并上传至七牛云
本文主要介绍一下阿里云CentOS7下如何对MySql 8.0数据库进行自动备份,并使用.NET Core 将备份文件上传至七牛云存储上,并对整个过程所踩的坑加以记录. 环境.工具.准备工作 服务器: ...
随机推荐
- 动态类(Dynamic)应用
动态类(Dynamic)应用 背景: 在Coding中有时候会遇到一些需要解析的数据,可是数据的字段数量和名称未统一,我们没法定义实体类来对应.那么我们就会想到通过C#的dynamic动态类来实现,如 ...
- SEO 优化,网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)
这篇文章不错. http://www.cnblogs.com/zangdalei/archive/2010/08/31/1814047.html 看了一半之后的,觉得不太靠谱,很多都不懂. 于是 找 ...
- 20款最好的免费的IDES和编辑器
程序员编程利器:20款最好的免费的IDES和编辑器 Posted on 2015-02-17 21:52 尛鱼 阅读(170) 评论(1) 编辑 收藏 程序员编程利器:20款最好的免费的IDEs和编辑 ...
- php中soap应用
原文:php中soap应用 SOAP:简单对象访问协议 (SOAP:Simple Object Access Protocol) 简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议 ...
- CentOS-6.3安装配置SVN
安装说明 系统环境:CentOS-6.3 安装方式:yum install (源码安装容易产生版本兼容的问题) 安装软件:系统自动下载SVN软件 检查已安装版本 #检查是否安装了低版本的SVN [ro ...
- Delphi三层网络架构代码实现
Delphi三层网络架构代码实现 1 .三层网络的概念 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为: 表现层(UI).业务逻辑层(BLL).数据访 ...
- leetcode第六题--ZigZag Conversion
Problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...
- wsgi-restful-routes具体解释:
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...
- uml系列(四)——类图
类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...
- Java凝视Override、Deprecated、SuppressWarnings详细解释
一.什么是视线 说起目光,你必须先提什么是元数据(metadata). 所谓元数据是数据的数据.那.元数据是描述数据的叙述. 像在表中的数据字段,叙述了这个字段下的数据的含义.而J2SE5.0 ...