变量

185 阅读2分钟

基本类型

基本类型:Undefined、Null、Boolean、String、Number、Symbol

可以使用 typeof 运算符确定一个值是哪种基本类型。

按值访问,可以操作保存在变量中的实际的值。

引用类型

对象(Object)、数组(Array)、函数(Function)

引用类型的值是按引用访问的,它是保存在内存中的对象。JavaScript不允许直接访问内存中的位置,所以在操作对象时,实际上是在操作对象的引用。

复制变量值

基本类型

如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。如:

var num1 = 5;
var num2 = num1;

复制前的变量对象:

num1 5

复制后的变量对象:

num2 5
num1 5

引用类型

当一个变量向另一个变量复制引用类型的值时,也会将存储在变量中的值复制一份到新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,这个指针指向存储在堆中的一个对象。复制结束后,两个变量实际上将引用同一个对象。

var obj1 = new Object()
var obj2 = obj1

引用类型检测

对象(Object)、数组(Array)、函数(Function)

数组

检测方法:

value instance of Array
Array.isArray(value)

方法

  • every
  • some
  • filter
  • +forEach
  • map
  • reduce/reduceRight

Date 对象

RegExp

Function 类型

定义

  1. 函数声明语法
function sum(a, b) {
    return a + b;
}
  1. 函数表达式
var sum = function(a, b) {
    return a + b;
};

函数声明和函数表达式

解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会先读取函数声明,并使其在执行任何代码之前可用(可访问);函数表达式必须等到解析器执行到它所在的代码行,才会真正被解释执行。

函数的 this

this 引用的是函数据以执行的环境对象。

call/apply/bind

  • call/apply 扩充作用域,好处:对象不需要与方法有任何耦合关系。
  • bind会创建一个函数的实例,其this值会被绑定传给 bind() 函数的值。

Math 对象

  • Math.min()
  • Math.max()
  • Math.ceil() 向上舍入
  • Math.floor() 向下舍入
  • Math.round() 四舍五入
  • Math.abs(num) 返回 num 的绝对值
  • Math.exp(num) 返回 Math.E 的num 次幂
  • Math.log(num) 返回 num 的自然对数
  • Math.pow(num, power) 返回 num 的 power 次幂
  • Math.pow(num, power) 返回 num 的 power平方根
  • Math.acos(x) 返回 x 的反余弦值
  • Math.asin(x) 返回 x 的反正弦值
  • Math.atan(x) 返回 x 的反正切值
  • Math.atan2(y, x) 返回 x 的反正切值
  • Math.cos(x) 返回 x 的余弦值
  • Math.sin(x) 返回 x 的正弦值
  • Math.tan(x) 返回 x 的正切值