Aaron Gustafson著,李松峰 李雅雯 等译。感觉绝对是一本值得看的书。感兴趣的朋友可以看一下。下面是我从其中抽出来的javascript常见陷阱和对象的概念整理出来的。希望对大家能有一些帮助。
Ø Javascript语法中常见的陷阱
² 区分大小写
² 单引号和双引号实际上是没有特殊的区别的,这点我是从看了这本书才开始真正的知道,虽然在以前写程序时写过‘'号的字符串形式,但是却没有先觉性的发现“哦,原来这样也可以。”
另外大多数情况下还都是用‘'来表示字符串的,因为XHTML规范要求所有XHTML属性值都用“”括起来。这样混合代码时会很清晰。
² 换行,千万不要忽略这一点。因为如果在一个字符串中你用了回车做换行那么对不起了,浏览器会告诉你我不认识你的字符串。因为它会自动将回车转换成”;“但是为了解决这个问题,还好它提供了一个转义字符作为替代。如下所示:
var='
A list
\- \
- \
有人会说可以用加号的,这些我知道。用加号作为字符串的操作符。估计是底层进行了+号的重载(?!)。
² 可选的分号和花括号
如果你不相信,我告诉你这是可以的。可以说这点javascript做的还是比较智能的。但是和前述那本书作者一样,我想我们做程序员还是规规矩矩些比较好。
² 重载
有时候或许你会突发奇想曲做一个javascript的重载函数,你会发现这时候竟然只有最后一个可以运行,前面的都没有得到录用机会。这是什么原因呢?
原来,先前的某某已经被后面的给替换掉了。也就是通常说的覆盖。再进一步说就是程序只引用作用域链中的最后一个同名函数。
² 匿名函数
不得不说这个家伙很有用。
² 作用域解析和闭包
这个作用域相信大家都比较熟悉,因为每个编程语言都有这样的概念。
而作用域链是用来描述一种路径的属于,沿着该路径可以确定变量的值(或者当函数被调用时要使用的方法)
闭包是与作用域相关的一个概念,它指的是内部函数即使在外部哈数执行完成并终止以后,仍然可以访问其外部函数的属性。当引用一个变量或方法时,javascript会沿着由对象执行路径构成的作用域链进行解析,查找变量最近定义的值。一旦找到,即使用该值。
² 迭代对象
不要怀疑这用的不好的话,很可能会产生错误。不信就看这一个例子:
var all=document.getElementsByTagName(‘*');
for(i in all){
//对all[i]元素进行操作。
}
由于返回的会分别等于length、item和namedItem,而这个很可能会导致代码中出现意外错误。
这时要做一下处理。用hasOwnProperty进行属性过滤,这个函数在对象的属性或方法是非继承的时返回true。方法如下:
var all=document.getElementsByTagName(‘*');
for(i in all){
if(!all.hasOwnProperty(i)){continue;}
//对all[i]元素进行操作。
}
² 函数的调用和引用。
注意了,这是不同的,调用会执行,引用只会给变量一个copy(好像可以这样理解吧?)
看下这个:
var foo=exampleFunction();
var foo=exampleFunction;
这两句式不一样的。前一个是执行exampleFunction这个函数并将返回值赋给变量foo,而后一个却是将exampleFunction这个函数的引用赋给foo。
Ø Javascript对象
属性和方法的概念相信大家都晓得。下面讲下javascript中的对象和其中的玄奥妙义(讲的跟武侠似的)。
1. 继承
Javascript的继承让我很奇怪,但是想过之后感觉还是有道理的。而且和其他的还是一样的思想。其实javascript就是做了一个复制的操作。闲话不说看一个例子相信大家都会清楚了。
//创建一个person对象的实例
var person={};
person.getName=function(){……};
person.getAge=function(){……};
//创建一个employee对象的实例
var employee={};
employee.getTitle=function(){……};
enployee.getSalary=function(){……};
//从person对象中继承方法
employee.getName=person.getName;
employ.getAge=person.getAge;
2. 创建自己的对象
有两种方式可以创建自己的对象:
第一种:var myObject =new Object();
第二种:var myObject={};//是第一种的简写形式。实际上面已经用到了。
3. 创建构造函数
第一种:function myConstructor(a){
//代码
}
不要惊讶,想象前面说的javascript中到处都是对象,虽然有些夸张。这个函数一时一个对象。
第二种:
或许聪明的读者已经猜出来了,就是函数定义的另外两种类型:
var myConstructor=function(a){};
第三种也一起写出来吧:var myConstructor=new Function(‘a',/*某些代码*/);
不过对于这种方式,因为会导致性能问题,所以还是用function比较妥当。
最后给个书中的例子:
function myConstructor(message){
alert(message);
this.myMessage=message;
}
var myObject =new myConstructor(‘Instantiating myObject!');
4. 添加静态方法
var myObject={};
//添加属性
myObject.name=”Jeff”;
//添加方法
myObject.alertName=function(){
alert(this.name);
}
//执行方法
myObject.alertName();
相信大家都能看明白,不说了。
5. 想原型中添加公有方法
添加公有方法的方式是用prototype,注意这里的prototype可不是那个js库。
//创建构造函数
function myConstructor(message){
alert(message);
this.myMessage=message;
}
//添加一个公有方法
myConstructor.prototype.clearMessage=function(string){
this.myMessage+=''+string;
}
这里面要提的一点是 构造函数中凡是以var开头的变量全部是私有变量,不是以.号和prototype添加而是直接写入构造函数中的为私有函数。
6. 最后提一下对象字面量
对象字面量对于代码的重构,冗余度的减小都很有帮助。所以如果可能的话最好用这种
看下下面的例子:
var myObject={
propertyA:'value',
propertyB:'value',
methodA:function(){}
}
不得不同意作者的观点,这种方式很优雅。
怎么样?是不是对Javascript中的对象和陷阱有了一些基本的认识?希望这篇文章对你有所帮助。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境