7 JavaScript Basics Many Developers Aren't Using (Properly)【转】
JavaScript, at its base, is a simple language that we continue to evolve with intelligent, flexible patterns. We've used those patterns in JavaScript frameworks which fuel our web applications today. Lost in JavaScript framework usage, which many new developers are thrust right into, are some of the very useful JavaScript techniques that make basic tasks possible. Here are seven of those basics:
1. String.prototype.replace: /g and /i Flags
One surprise to many JavaScript newbies is that String's replace method doesn'treplace all occurrences of the needle -- just the first occurrence. Of course seasoned JavaScript vets know that a regular expression and the global flag (/g) need to be used:
// Mistakevar 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"// Desired
str.replace(/David/g,"Darren");// "Darren is an Arsenal fan, which means Darren is great"
Another basic logical mistake is not ignoring case when case is not critical to the validation (letters may be uppercase or lowercase), so the /i flag is also useful:
str.replace(/david/gi,"Darren")// "Darren will always be an Arsenal fan, which means Darren will always be great"
Every JavaScript developer has been bitten by each of the flags in the past -- so be sure to use them when when appropriate!
2. Array-Like Objects and Array.prototype.slice
Array's slice method is principally for grabbing segments of an array. What many developers don't know is that slice can be used to covert Array-like objects like arguments, NodeLists, and attributes into true arrays of data:
var nodesArr =Array.prototype.slice.call(document.querySelectorAll("div"));// "true" array of DIVsvar argsArr =Array.prototype.slice.call(arguments);// changes arguments to "true" array
You can even clone an array using a simple slice call:
var clone = myArray.slice(0);// naive clone
Array.prototype.slice is an absolute gem in the world of JavaScript, one that even novice JavaScript developers don't know the full potential of.
3. Array.prototype.sort
The Array sort method is vastly underused and probably a bit more powerful than most developers believe. Many developers would assume sort would do something like this:
[1,3,9,2].sort();// Returns: [1, 2, 3, 9]
...which is true, but sort has more powerful uses, like this:
[{ 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 previousreturn obj1.age - obj2.age;});// Returns: // [// { name: "Theo Walcott", age: 24 },// { name: "Bacary Sagna", age: 28 },// { name: "Robin Van PurseStrings", age: 30 }// ]
You can sort objects by property, not just simple basic items. In the event that JSON is sent down from the server and objects need to be sorted, keep this in mind!
4. Array Length for Truncation
There's not a developer out there that hasn't been bitten by JavaScript's pass-objects-by-reference nature. Oftentimes developers will attempt to empty an array but mistakenly create a new one instead:
var myArray = yourArray =[1,2,3];// :(
myArray =[];// "yourArray" is still [1, 2, 3]// The right way, keeping reference
myArray.length =0;// "yourArray" and "myArray" both []
What these developers probably realize is that objects are passed by reference, so while setting myArray to [] does create a new array, other references stay the same! Big mistake! Use array truncation instead.
5. Array Merging with push
I showed in point 2 that Array's slice and apply can do some cool stuff, so it shouldn't surprise you that other Array methods can do the same trickery. This time we can merge arrays with the push method:
var mergeTo =[4,5,6],var mergeFrom =[7,8,9];Array.prototype.push.apply(mergeTo, mergeFrom);
mergeTo;// is: [4, 5, 6, 7, 8, 9]
A wonderful example of a lessor-known, simple native method for completing the basic task of array merging.
6. Efficient Feature/Object Property Detection
Oftentimes developers will use the following technique to detect a browser feature:
if(navigator.geolocation){// Do some stuff}
While that works correctly, it isn't always efficient, as that method of object detection can initialize resources in the browser. In the past, the snippet above caused memory leaks in some browsers. The better and more efficient route is checking for a key within an object:
if("geolocation"in navigator){// Do some stuff}
This key check is as simple as it gets and may avoid memory problems. Also note that if the value of a property is falsy, your check will fail despite the key being present.
7. Event preventDefault and stopPropagation
Oftentimes we trigger functionality when action elements like links are clicked. Obviously we don't want the browser to follow the link upon click, so we use our handy JavaScript library's Event.stop method:
$("a.trigger").on("click",function(e){
e.stop();// Do more stuff});
The problem with this lazy method of stopping the event is that not only does it prevent the default action, but it stops propagation of the event, meaning other event listeners for the elements wont fire because they don't know about the event. It's best to simply use preventDefault!
Seasoned JavaScript developers will see this post and say "I knew those," but at one point or another, they got tripped up on some of these points. Be mindful of the little things in JavaScript because they can make a big difference.
http://tech.pro/tutorial/1453/7-javascript-basics-many-developers-aren-t-using-properly
7 JavaScript Basics Many Developers Aren't Using (Properly)【转】的更多相关文章
- 《Professional JavaScript for Web Developers》day02
<Professional JavaScript for Web Developers>day02 1.在HTML中使用JavaScript 1.1 <script>元素 HT ...
- 《Professional JavaScript for Web Developers》day01
<professional JavaScript for Web Developers>day01 1.JavaScript简介 1.1JavaScript简史:略 1.2JavaScri ...
- 《Professional JavaScript for Web Developers》day03
<Professional JavaScript for Web Developers>day03 1.1ECMAScript语法 1.1.1 区分大小写 1.1.2 标识符 按照惯例,E ...
- Professional JavaScript for Web Developers 4th Edition
Professional JavaScript for Web Developers 4th Edition learning notes / 学习笔记 https://github.com/xgqf ...
- Best JavaScript Tools for Developers
JavaScript solves multiple purposes; it helps you to create interactive websites, web applications, ...
- Professional JavaScript for Web Developers 3rd Edition ---读书笔记
1. DOMContentLoaded DOM树构建完成时触发该事件 load 页面加载完毕触发 原生js document.addEventListener('DOMContentLoaded', ...
- Translation perface: <<Professional JavaScript for Web Developers, 3rd Edition>>
It is a huge pitty to breaking translating this book. Sincerly speaking, I am striken by this great ...
- JavaScript basics: 2 ways to get child elements with JavaScript
原文: https://blog.mrfrontend.org/2017/10/2-ways-get-child-elements-javascript/ Along the lines of oth ...
- Professional JavaScript for Web Developers P226
我是这么理解的: (object.getName = object.getName),这条语句在执行结束后,返回的是右操作数object.getName: 但是关键是这个右操作数现在放在哪里 ? 我 ...
随机推荐
- 多个UpdatePanel控件相互引发刷新的使用
原文:多个UpdatePanel控件相互引发刷新的使用 ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果.其中的UpdatePanel就是设置页面中异 步局 ...
- poj1655 Balancing Act 找树的重心
http://poj.org/problem? id=1655 Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- mysql安装注意
mysql安装教程,网上到处都有,我这里就不细说了. 但是有一点要注意,安装完之后,点击MySql 5.5 Command Line Client时,有可能出现一闪而过,打不开mysql的情况: 首先 ...
- HttpDNS 服务详解(转)
但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存.用户跨网访问缓慢等问题.那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异 ...
- STM32F103 TIM1输出PWM设置
//TIM1 分频 #define TIM1_DIV1 (1-1) #define TIM1_DIV2 (2-1) #define TIM1_DIV4 (4-1) #define TIM1_DIV8 ...
- Yii 控制dropdownlist / select 控件的宽度和 option 的宽度
默认情况下, option的宽度会由options中最宽的元素决定,并且同时决定着select控件的宽度 在Yii中,如果需要自定义select控件的宽度,可以用 htmlOptions定义,如下: ...
- 1104. Don’t Ask Woman about Her Age(数论)
a*b^n(mod(b-1) =a(mod(b-1) http://acm.timus.ru/problem.aspx?space=1&num=1104 #include <stdio. ...
- mybatis与mysql插入时返回主键id的值
<insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...
- Javascript 进阶 作用域 作用域链
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1. ...
- hdu 2391 Filthy Rich
单纯dp 水一 处理时间点,第一行和第一列特殊处理: 其余的w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1]); <span style="fo ...