JavaScript容易忽略的细节

时间:2022-09-04 15:44:56

1.null和undefined 

undefined:表示一个对象没有被定义或者没有被初始化。

null:表示一个尚未存在的对象的占位符。 

undefined类型是null派生出来的所以,它们相等

alert(undefined==null)//输出true

2.typeof

未声明的对像只能用typeof运算符判断,并且typeof返回值为字符串所以,在进行类型比较时应为

var vItem; 

if(typeof vItem=="undefined")

而 

if(typeof vItem==undefined)永远为false

对于null而言,alert(typeof null);//输出object 。这其实是JavaScript最初实现的一个错误,但因为ECMAScript的沿用,成为了现在的标准。所以需要将null类型理解为“对象的占位符”

3.变量声明 

js是若类型语言,即使变量类型在初始化时已经被确认,仍然可以在之后改变

var vItem=1;

alert(typeof item); //输出number

vItem="1"; 

alert(typeof item) ;//输出string

js的变量声明可以为var iItem=1;也可以在隐式声明 iItem=1;但需要注意的是,隐式声明的变量总被创建为全局变量,即使在函数中也是一样

function test(){

 iItem=1;

this.test(); 

alert(iItem); 

4.JavaScript命名规范

js命名推荐匈牙利命名法 比如 function fnMethod(){}

下面是匈牙利命名法的前缀列表:

类型

前缀

示例

Array

a

aNameList

Boolean

b

bVisible

Float

f

fMoney

Function

fn

fnMethod

Int

i

iAge

Object

o

oType

Regexp(正则表达式)

re

rePattern

string

s

sName

可变类型

v

vObj

5.使用原型prototype实现js面对对象

原型,表示对象的初十状态,JavaScript中的每个对象都有一个prototype 属性,但是只有function类型的prototype属性可以使用脚本直接操作

Object的prototype属于内部属性,无法直接操作。prototype属性本身就是一个objece类型,一个函数的prototype上所定义的属性和方法都会在

其实例对象上存在。所以说prototype就是C#中的实例方法和实例属性

function fnStaticClass(){}//声明一个类

fnStaticClass.statMethod=function (){alert("static method")}; //创建一个静态方法

fnStaticClass.prototype.instanceMethod=function(){alert("instacne method")};//创建一个实例方法

fnStaticClass.statMethod();//直接调用静态方法

var instance = new fnStaticClass();//实例化
instance.instanceMethod();//在实力上调用实例方法