JavaScript学习笔记(七)

Posted by Ivens on November 5, 2019

一.JavaScript对象

在 JavaScript 中,几乎“所有事物”都是对象。

  • 布尔是对象(如果用 new 关键词定义)
  • 数字是对象(如果用 new 关键词定义)
  • 字符串是对象(如果用 new 关键词定义)
  • 日期永远都是对象
  • 算术永远都是对象
  • 正则表达式永远都是对象
  • 数组永远都是对象
  • 函数永远都是对象
  • 对象永远都是对象

所有 JavaScript 值,除了原始值,都是对象。 原始值指的是没有属性或方法的值。

二.JavaScript 对象属性

添加新属性

1
2
// person 对象已存在 - 那么您可以为其添加新属性:
person.属性名 = 属性值;

删除属性

1
2
3
// delete 关键词从对象中删除属性:
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
delete person.age;   // 或 delete person["age"];

delete 关键词会同时删除属性的值和属性本身。

三.对象方法

添加新方法

1
2
// person 对象已存在 - 那么您可以为其添加新方法:
person.属性名 = function() {};

这个方式同增加对象属性

四.JavaScript 函数定义

避免使用new,即通过名为 Function() 的内建函数构造器来定义。

1
2
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);

函数提升

Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。Hoisting 应用于变量声明和函数声明。正因如此,JavaScript 函数能够在声明之前被调用:

1
2
3
4
5
myFunction(5);

function myFunction(y) {
     return y * y;
}

注意:使用表达式定义的函数不会被提升,如var x = function(){...}

箭头函数

1
2
3
4
5
6
7
8
// ES5
var x = function(x, y) {
  return x * y;
}

// ES6
const x = (x, y) => x * y;
// 使用 const 比使用 var 更安全,因为函数表达式始终是常量值。

参数默认

如果调用参数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined。

1
2
3
4
5
6
// 有时这是可以接受的,但是有时最好给参数指定默认值:
function myFunction(x, y) {
    if (y === undefined) {
          y = 0;        //如果没有接收到y的值,则赋值0
    } 
}

arguments 对象包含函数调用时使用的参数数组


重点

JavaScript 参数通过值传递:函数只知道值,而不是参数的位置。但当参数是对象,数组时,则是引用传递,会改变函数外对象的值。

可以参考——《JavaScript对象参数的引用传递

五.This

被称为 this 的事物,是“拥有”这段 JavaScript 代码的对象

1
2
3
4
5
6
7
8
9
// 在此例中,this 的值是 myObject。
var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this;
    }
}
myObject.fullName();          // 将返回 [object Object](拥有者对象)