javaScript学习笔记

JavaScript的组成部分

  • ECMAScript:由ECMA-262定义,提供核心语言功能
  • 文档对象模型(DOM):提供访问和操作网页内容的方法和接口
  • 浏览器对象模型(BOM):提供与浏览器交互的方法和接口

变量 作用域和内存问题

JavaScript的变量与其他语言有很大区别.不存在定义某个变量必须要保存何种数据类型值的规则,变量的值以及数据类型可以在脚本的生命周期内改变.

复制变量值

  • 从一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把该值赋值带为新变量分配的位置上.

  • 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份跟放到为新变量分配的空间中,不同的是,这个值的副本实际上是一个指针.而这个指针指向存储在堆内存中的一个对象.

传递参数

Js中所有函数的参数都是按值传递的.不同的是,对于基本类型的值来说,被传递的值会复制给一个局部变量.对于引用类型的值,会把这个值在内存中的地址复制给一个局部变量.因此这个局部变量的变化会反映在函数的外部.

检测类型

  • 检测基本数据类型,通常使用typeof操作符,换句话说,typeof操作符是确定一个变量是字符串,数字,布尔值还是undefined的最佳工具.
  • 检测引用类型,通常使用instanceof操作符.语法如下:
    result = variable instanceof constructor

JavaScript函数

arguments对象

JavaScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么类型,即使定义的函数只接受两个参数,调用时也未必要传递两个参数,原因是JavaScript函数的参数在函数内部用一个arguments对象来表示.

  • 参数个数

    当实参比函数声明指定的形参要少,剩下的形参都将设置为undefined,通常会使用逻辑或(||)来判断参数是否有值来给变量设置默认值.

    1
    2
    3
    4
    5
    6
    7
    function add(x,y){
    x = x||1;
    y = y||2;
    return x+y;
    }

    add(3);
  • 对象参数

    当函数中需要传递多个参数时,一般会使用对象参数的方式,通过键/值对的形式传递参数,这样参数的顺序就无关紧要了.