日期:2014-05-16  浏览次数:20380 次

JavaScript 学习(1)

JavaScript的两个特征:

?

  • 不需要声明就可以使用变量
  • 有隐含的全局概念,即不声明的任何变量都会成为全局对象(this)的属性
   function sum(x, y) {
      // 不推荐写法: 隐式全局变量 
      result = x + y;
       return result;
      }
    alert("sum="+sum(3,3) + " result="+result);

 // 结果:sum=6  result=6 
 // 说明:如果不调用sum函数,直接运行alert(result),结果就是 result 未定义,  因此、尽量使用var声明变量.
? ??

? ? *使用任务链进行部分var声明
function sum() {
var a = b = 0;
// a 是局部变量、b是全局变量
}
? ??此现象发生的原因在于这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。
? ? ??
? ?
? ? ?隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。
  • 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
  • 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
? ? ?这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删 除的,而变量是不能的:

// 定义三个全局变量
var global_var = 1;
global_novar = 2; // 反面教材
(function () {
   global_fromfunc = 3; // 反面教材
}());

// 试图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true

// 测试该删除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
?

JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只 要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。看下面这个例子:
range = "global"; // 全局变量
function show() {
    alert(range ); // "undefined"
    var range = "local";
    alert(range ); // "local"
}
show();
?


在coding中,编码规范非常重要,可以让自己和团队其他成员更易阅读和理解。
  • 缩进
  • 空格
  • 分号
  • 变量定义(个人偏好 ?各单词用下划线分隔)
  • 方法定义(公有和私有应区分)
  • 常量定义(个人偏好 全部大写)
  • 注释
努力编写高质量的javascript代码!


javascript对象字面量

? ?javascript允许使用一种简洁而可读的记法来创建数组和对象.

?

var customer = new Object();
customer.firstName="yongfei";
customer.lastName="yang";
?? 等价于:
? ?var customer={firstName:'yongfei',lastName:'yang'}

?

对象字面量(object literal)一个名值对列表,每个名值对之间用逗号分隔,并用一个大括号括起。各名值对表示对象的一个属性,名和值这两部分之间用一个冒号分隔。

数组字面量(array literal):这是一个用逗号分隔的值列表

函数字面量:前面是一个function关键字,后面是一个函数名(可选)和参数表。然后是函数体,包围在大括号中。

?

?


? ? ?prototype使用技巧

  • JavaScript为每一个类型(Type)都提供了一个prototype属性,将这个属性指向一个对象,这个对象就成为了这个类型的“原型”,这意味着由这个类型所创建的所有对象都具有这个原型的特性。另外,JavaScript的对象是动态的,原型也不例外,给prototype增加或者减少属性,将改变这个类型的原型,这种改变将直接作用到由这个原型创建的所有对象上.
  • 如果给某个对象的类型的原型添加了某个名为a的属性,而这个对象本身又有一个名为a的同名属性,则在访问这个对象的属性a时,对象本身的属性“覆盖”了原型属性,但是原型属性并没有消失,当你用delete运算符将对象本身的