javascript零碎整理

来源:互联网 发布:js点击图片全屏放大 编辑:程序博客网 时间:2024/06/14 06:27

for-in循环(for-in loops)

采用for遍历数组,采用for in 遍历对象属性。for-in循环应该用在非数组对象的遍历上面,使用的"for-in"进行循环也叫“枚举”。从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环此外在遍历对象属性用一个重要的方法过滤从原型链下来的属性。
// for-in 循环for (var i in man) {   if (man.hasOwnProperty(i)) { // 过滤      console.log(i, ":", man[i]);   }}

避免eval()

eval()函数是魔鬼。此方法接收任意的字符串,并把它当作javascript代码来处理。当有问题的代码是事先知道的(不是运行时去确定的),没有理由使用eval()。使用eval()也带来了安全隐患,因为被执行的代码(例如从网络来)可能已被篡改。这是个很常见的反面教材,当处理Ajax请求得到的JSON 相应的时候。在这些情况下,最好使用JavaScript内置方法来解析JSON相应,以确保安全和有效。若浏览器不支持JSON.parse(),你可 以使用来自JSON.org的库。同样重要的是要记住,给setInterval(), setTimeout()和Function()构造函数传递字符串,大部分情况下,与使用eval()是类似的,因此要避免。

代码中左花括号的位置{

有的编程人员的风格喜欢把左花括号放在下一行或是放在同一行。有时括号的位置不同会有不同的表现形式,原因是分号机制,javascript是不挑剔的,当你选择不使用分号结束一行代码时JavaScript会自己帮你补上,这种行为可能会导致麻 烦,如当你返回对象字面量,而左括号却在下一行的时候:
// 警告: 意外的返回值function func() {   return  // 下面代码不执行   {      name : "Batman"   }}

希望返回一个含有name属性的对象,由于隐含分号,函数返回undefined,前面的代码等价于function fun(){return undefined;{name:"Batman"}}
总之,总是使用花括号,并始终把在与之前的语句放在同一行。


命名规范

命名构造函数时首字母大写
函数或则变量名包括多个单词时,应该驼峰命名
javascript中没有定义常量的方法(尽管有些内置的像Number,MAX_VALUE),所有开发者都采用全部单词大写来命名程序生命周期不会改变的变量
另外一种使用规范来模拟功能是私有成员。虽然可以在javascript中实现真正的私有,但一般用一个下划线前缀来表示一个私有属性和方法。
  • 使用尾下划线表示私有,如name_getElements_()
  • 使用一个下划线前缀表_protected(保护)属性,两个下划线前缀表示__private (私有)属性
  • Firefox中一些内置的变量属性不属于该语言的技术部分,使用两个前下划线和两个后下划线表示,如:__proto____parent__


()操作符(分组操作符)

分组操作符中不允许存在语句,只能允许存在表达式。
一个函数存在分组操作符中就为函数表示式不是函数申明如下:(function aaa(){});在使用eval()对json字符串进行解析的时候通常字符串被包括在一个圆括号里面:eval('(' + json + ')');这样做原因就是因为分组操作符,也就是这对括号会让解析器强制将JSON的花括号解析成表达式而不是代码块。如下:eval('(' + "{'x':5}" + ')') ;分组操作符强制将"{" 和 "}"作为对象字面量来解析。


函数表达式和函数声明

数声明和函数表达式有着十分微妙的差别,首先函数声明会在任何表达式被解析和求值之前先被解析求值,即使你的声明代码在最后一行,他也会在同作用域内第一个表达式之前被解析/求值。(解析器向执行环境中加入数据的时候,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到他所在的代码行才会真正被解释执行,在代码执行之前,解析器就已经通过一个名为函数声明提升引擎在第一遍会声明函数并将他们放到源代码数顶部,所以即使声明函数代码在调用它的代码之后,javaScript引擎也能把函数声明提升到代码树顶部)。
注:函数申明在条件语句中虽然可以使用但是没有标准化,在不同环境中执行情况可能不同,如下,有的会返回first有的会返回second
  if (true) {    function foo() {      return 'first';    }  }  else {    function foo() {      return 'second';    }  }  foo();


javascript中的with关键字(在严格模式下不能使用with)

with语句的作用是将代码的作用域设置到一个特定的作用域中
with关键字在javascript没有从常用,作用是用来定义一个和对象相关的作用域,该作用域中可以访问对象的属性和方法,无需采用“.”操作符来访问对象属性,直接访问属性名就可以,达到代码简化的效果。例:
 var person = {            name:"Jane",            age:30,            address:"china",            phone:"133333"        }        with (person)        {            age = 31;            address = "america";        }        alert(person.age);//31        alert(person.address);//america
在这段代码中,使用了with语句关联了person对象,这就以为着在with代码块内部,每个变量首先被认为是一个局部变量,如果局部变量与person对象的某个属性同名,则这个局部变量会指向person对象属性。
上面代码首先定义了一个person对象,然后采用with语句创建了一个和person相关的作用域,在该作用域中我们引用对象的属性无需加上对象名。在里面对属性进行操作后,对象相应的属性值改变。

javascript中实现继承的三种方式

  1. 通过设置对象的prototype属性实现继承。
  2. 通过apply(),call()函数实现继承。
  3. 通过调用Object.create()方法实现继承。
如需转载,注明出处!