JavaScript学习笔记(三)

变量
    1.JavaScript是非类型的(untype)
    2.用var声明的变量在赋值以前,其值都是undefined
    3.由var声明的变量是永久性,用delete运算来删除这些变量会报错
    4.重复声明是被允许的
    5.如果给一个未用var声明的变量赋值,JavaScript将隐式声明这个变量为全局变量。而声明局部变量必须用var。为了避免各种错误的出现,最好的做法是声明变量就用var
    6.重点:没有块级作用域,例如:
         for(var k=0;k<10;k++){
           document.write(k);
         }
         document.write(k);
    7.引用数据类型和基本数据类型
    8.JavaScript不像C和C++一样需要程序员手动释放内存,他和java一样有垃圾回收机制
    9.变量i和对象obj的属性i有什么根本的区别吗?答案是没有。
    10.当JavaScript的解释器开始运行时,它首先初始化一个全局对象(global object),这个对象的属性就是JavaScript的全局变量。之后我们所声明的全局变量也是该对象的一个属性。除此之外,解释器还会用预定义的值和函数来初始化全局对象的许多属性。
    11.全局变量是全局对象的一个属性,那么局部变量就是调用对象(call object)的一个属性。在执行一个函数时,函数的参数和局部变量是作为调用对象的属性而存储的。
    12.JavaScript的执行环境:
    所有的JavaScript函数都运行在自己独有的执行环境中,而且具有自己的调用对象,在调用对象中定义了局部变量。运行不属于任何函数的JavaScript代码的环境使用的就是全局对象。要注意的是,JavaScript允许有多个全局执行环境,每个执行环境有不同的全局对象。例如:每个独立的浏览器窗口或同一窗口的不同帧中都定义了独立的全局执行环境。但这些全局环境并不是孤立的脱节的,他们之间是可以相互引用的。例如这样的引用:parent.frames[0].x
    13.每个JavaScript执行环境都有一个和它关联在一起的作用域链(scope chain)。这个作用域链是一个对象列表或者一个对象链。当JavaScript代码需要查询变量x时,它会先看这个链的第一个对象中有没有,有就返回没有就找下一个,依次类推,如果都没有,就返回未定义。

运算符
    1.“==”和“===”。==是相等运算符,它采用比较宽松的同一性定义(即允许进行类型转换)检测两个运算数是否相等。===是等同于运算符,它采用严格的同一性定义检测两个运算数是否相等。例如:
        alert("1"===true);//输出值为false
        alert("1"==true);//输出值为true
    2.in运算符。in的左边是一个字符串,右边是一个对象,如果该字符串是右边对象的属性名,则返回true
    3.instanceof运算符。左边为一个对象,右边是一个类名。如果左边的对象是右边类的一个实例,则返回true
    4.这两个表达式的值:
       s = 1 + 2 + " hello"
       t = "hello " + 1 + 2
    5.虽然JavaScript中所有的数字都是浮点型的,但是位运算却要求它的数字运算是整型的。这些整型数用的是32位的表示法。如果位运算操作的不是整型或者超过32位的范围,则返回NaN。
    6.typeof运算符。放在运算数之前,返回值是一个字符串,该字符串说明了运算数的类型。
    7.delete运算符。一元运算符,他将删除运算数所指定的对象的属性、数组元素或变量。如果删除成功返回true,否则返回false。
    8.void运算符。一元运算符,他总是舍弃运算数的值,返回undefined。
    9.[]运算符。用于存取数组元素,还可以用于存取对象的属性。当对象用作关联数组时,由于属性名是动态生成的,所以不能使用“.”运算符,只能使用“[]”。

你可能感兴趣的:(JavaScript,java,object,浏览器,delete,存储)