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)【转】的更多相关文章

  1. 《Professional JavaScript for Web Developers》day02

    <Professional JavaScript for Web Developers>day02 1.在HTML中使用JavaScript 1.1 <script>元素 HT ...

  2. 《Professional JavaScript for Web Developers》day01

    <professional JavaScript for Web Developers>day01 1.JavaScript简介 1.1JavaScript简史:略 1.2JavaScri ...

  3. 《Professional JavaScript for Web Developers》day03

    <Professional JavaScript for Web Developers>day03 1.1ECMAScript语法 1.1.1 区分大小写 1.1.2 标识符 按照惯例,E ...

  4. Professional JavaScript for Web Developers 4th Edition

    Professional JavaScript for Web Developers 4th Edition learning notes / 学习笔记 https://github.com/xgqf ...

  5. Best JavaScript Tools for Developers

    JavaScript solves multiple purposes; it helps you to create interactive websites, web applications, ...

  6. Professional JavaScript for Web Developers 3rd Edition ---读书笔记

    1. DOMContentLoaded DOM树构建完成时触发该事件 load 页面加载完毕触发 原生js document.addEventListener('DOMContentLoaded', ...

  7. 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 ...

  8. 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 ...

  9. Professional JavaScript for Web Developers P226

    我是这么理解的: (object.getName = object.getName),这条语句在执行结束后,返回的是右操作数object.getName: 但是关键是这个右操作数现在放在哪里 ?  我 ...

随机推荐

  1. 优秀Java程序员必须了解的GC工作原理(转)

    一个优秀的Java程序员必须了解GC(Garbage Collection 垃圾收集)的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系 ...

  2. c#程序内存分配

    c#程序内存分配 进程可使用内存数就是操作系统给进程分配的最大地址,一般的32位操作系统提供给用户地址最大都是3g(操作系统自己保留1g),windows由于商业目的,对于个人用户只提供了2g地址,要 ...

  3. 图像库---Image Datasets---OpenSift源代码---openSurf源代码

    1.Computer Vision Datasets on the web http://www.cvpapers.com/datasets.html 2.Dataset Reference http ...

  4. 源代码编译安装 PHP5.5.0,解决curl_exec訪问HTTPS返回502错误的问题

    近期碰到一个奇怪的问题. PHP使用 curl_exec 訪问 HTTPS 网页时, 返回502错误, 訪问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看. 支持op ...

  5. 【PhotoShop】采用PS让美丽的咖啡泡沫

    稀土一杯咖啡,如何你不能击败张(常苦黑咖啡饮料实在受不了! ) 得到例如以下图 看着还不错,但是总感觉空空荡荡的,所以就拿来PS练手了.终于效果图例如以下: 以下讲下制作过程: 首先是给照片加下咖啡泡 ...

  6. 全面认识Eclipse中JVM内存设置(转)

    这里向大家描述一下Eclipse中如何进行JVM内存设置,JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的,所以方法区.J ...

  7. Spring之AOP术语

    AOP是Aspect Oriented Programing的简称.被译为"面向切面编程". AOP独辟蹊径通过横向抽取机制为这类无法通过纵向继承体系进行抽象的反复性代码提供了解决 ...

  8. petshop4.0 其中详细解释(系统架构)

    前言:PetShop它是一个例子.微软用它来展示.Net容量企业系统开发.业界有很多.Net与J2EE争议.微软许多数据PetShop和Sun的PetStore从.这样的争论是不可避免的带有强烈的商业 ...

  9. 《Linux内核设计与实现》的地址空间读书笔记的过程

    1.核心区域进程包括各种内存对象 种内存对象,比方: 1.可运行文件代码能够包括各种内存映射,称为代码段(text section). 2.可运行文件的已初始化全局变量的内存映射,称为数据段(data ...

  10. c++ 计算程序运行时间

    转载 http://blog.csdn.net/trustbo/article/details/10582287 以前经常听人提起如何计算程序运行时间,给出一系列函数,当时没有注意,随便选了clock ...