一、变量类型
1. 特点:没有数据类型。
C#、Java是强类型化的语言,需要编译,而Javascript是弱类型语言,不需要编译。
声明Javascript变量使用关键字var,”基本类型”有number、string、boolean和函数,他们是Javascript中所有对象的基石。
2. Null类型和undefined类型
使用Javascript时,undefined和null之间的微妙差别很容易给代码带来问题。
一个方法就是通过双感叹号(!!)来利用Javascript的类型强制转换。不用显示地检查变量是undefined或null,而只是用两次!!非操作符即可:
If(!!something){ // some thing}
二、变量作用域
Javascript中允许在使用变量之前不加声明(实际上是被隐式地声明了)。
未加var关键字声明的变量会被自动指定为全局的作用域;(带来的问题:有的变量名会被重用;并且在不要求显式地声明变量的情况下外部作用域可能会被修改)
加了var关键字声明的变量为局部变量。
三、使用原型
Javascript不像其他面向对象语言那样支持继承,但是可以使用函数来建模数据类型。
Prototype对象代表着对象类型自己,可以把它看成一个类型定义。对象的任何实例都继承了所有的原型信息。已经创建的所有此类型对象,都会立即拥有基类的更新功能。当然了,可以在此对象定义中添加一个函数,这样将来创建的所有对象实例都可以使用此函数,而不用直接修改原型。
这种方式的缺点就是每个实例都必须按这种方式得到新函数的一个副本。使用对象的原型可以扩展对象的功能,这是在C#中建立静态方法和属性的自然方式。修改Javascript的原型就像修改.NET的基类,而不需要派生类知道进行了这个修改。
Javascript的prototype对象甚至允许修改其内置类型(如string)。向此脚本引擎提供的内部对象添加新功能时,就会对这个动态语言的强劲功能和灵活性有一定的了解。我们不用创建此类型的一个子类,并修改所有的代码来使用这个新派生类的新功能。
四、关于闭包
闭包指的是定义一个内部函数的方式,这种函数可以利用外部函数的环境状态,使该状态在外部是可见的,因此可以在外部函数返回执行这个内部函数。闭包的形为取决于创建此闭包时已经存在的状态和作用域。Javascript中的作用域行为和C#中的作用域是一样的,只有一点不同,Javascript会把未声明的(未使用var关键字)的变量指定为全局作用域。
如果要搜索闭包的信息,会找到一些很难理解、非常复杂的解释。要解释闭包,具体的示例要比正式的定义要好。
五、垃圾机制
Javascript是一个可以进行垃圾收集的语言。对象超出作用域,且不再有对它的引用时,系统就可以释放此变量,并且回收它占用的内存和资源。
六、处理异常
Javascript支持类似C#的异常处理方式。代码可以抛出异常。如果把代码放到try代码块中,相应的catch块就可以处理异常。之后,finally代码块来处理必要的垃圾回收和全局恢复工作。
七、获取字符串的一部分
八、更好的使用Javascript
1. 减少脚本:压缩脚本大小,服务器开启压缩功能
2. 脚本压缩:通过替换变量名来减小脚本的尺寸、
3. 使用缓存变量在编译语言中,编译器可以做一些工作,使代码执行更快。可以把函数中反复引用的变量的指针存储在寄存器中,以快速。方便地在整个函数中访问这个变量。在Javascript中,变量的解析是后期绑定的。每次使用变量时,就会在此作用域链中搜索这个对象,这可能花费时间。最好不要构建字符串,再在DOM元素中存储它们,而是在局部变量中构建字符串,然后统一为DOM元素赋值。
当循环一个数组时,要改善性能,可以初始化一个保存此数组长度的变量,而不是每次访问数组的length属性
for(var i=0; var l=someArray.length; i
it’s not over…