JavaScript 基础教程

JavaScript 首页 JavaScript 路线图 JavaScript 概述 JavaScript 功能特性 JavaScript 启用 JavaScript 位置 JavaScript 语法 JavaScript Hello World JavaScript Console.log() JavaScript 注释 JavaScript 变量 JavaScript let 语句 JavaScript 常量 JavaScript 数据类型 JavaScript 类型转换 JavaScript 严格模式 JavaScript 保留关键字

JavaScript 运算符

JavaScript 运算符 JavaScript 算术运算符 JavaScript 比较运算符 JavaScript 逻辑运算符 JavaScript 位运算符 JavaScript 赋值运算符 JavaScript 条件运算符 JavaScript typeof 运算符 JavaScript 空值合并运算符 JavaScript 安全赋值运算符 JavaScript 删除运算符 JavaScript 逗号运算符 JavaScript 分组运算符 JavaScript Yield 运算符 JavaScript 展开运算符 JavaScript 幂运算符 JavaScript 运算符优先级

JavaScript 控制流

JavaScript If...Else JavaScript While 循环 JavaScript For 循环 JavaScript For...in JavaScript For...of JavaScript 循环控制 JavaScript Break 语句 JavaScript Continue 语句 JavaScript Switch Case JavaScript 用户定义迭代器

JavaScript 函数

JavaScript 函数 JavaScript 函数表达式 JavaScript 函数参数 JavaScript 默认参数 JavaScript Function() 构造函数 JavaScript 函数提升 JavaScript 自调用函数 JavaScript 箭头函数 JavaScript 函数调用 JavaScript 函数 call() 方法 JavaScript 函数 apply() 方法 JavaScript 函数 bind() 方法 JavaScript 闭包 JavaScript 变量作用域 JavaScript 全局变量 JavaScript 智能函数参数

JavaScript 对象

JavaScript Number JavaScript Boolean JavaScript Strings JavaScript Arrays JavaScript Date JavaScript DataView JavaScript Handler JavaScript Math JavaScript RegExp JavaScript Symbol JavaScript Sets JavaScript WeakSet JavaScript Maps JavaScript WeakMap JavaScript 可迭代对象 JavaScript Reflect JavaScript TypedArray JavaScript 模板字面量 JavaScript 带标签的模板

面向对象的 JavaScript

JavaScript 对象 JavaScript 类 JavaScript 对象属性 JavaScript 对象方法 JavaScript 静态方法 JavaScript 显示对象 JavaScript 对象访问器 JavaScript 对象构造函数 JavaScript 原生原型 JavaScript ES5 对象方法 JavaScript 封装 JavaScript 继承 JavaScript 抽象 JavaScript 多态 JavaScript 解构 JavaScript 解构赋值 JavaScript 对象解构 JavaScript 数组解构 JavaScript 嵌套解构 JavaScript 可选链式调用 JavaScript 全局对象 JavaScript Mixins (混合) JavaScript 代理

JavaScript 版本

JavaScript 历史 JavaScript 版本 JavaScript ES5 JavaScript ES6 ECMAScript 2016 ECMAScript 2017 ECMAScript 2018 ECMAScript 2019 ECMAScript 2020 ECMAScript 2021 ECMAScript 2022

JavaScript 异步

JavaScript 异步 JavaScript 回调函数 JavaScript Promises JavaScript Async/Await JavaScript Microtasks (微任务) JavaScript Promises JavaScript Promises 链 JavaScript 定时事件 JavaScript setTimeout() JavaScript setInterval()

JavaScript Cookies

JavaScript Cookies JavaScript Cookie 属性 JavaScript 删除 Cookies

JavaScript 浏览器 BOM

JavaScript 浏览器对象模型 JavaScript Window 对象 JavaScript Document 文档对象 JavaScript Screen 对象 JavaScript History 对象 JavaScript Navigator 对象 JavaScript Location 对象 JavaScript Console 对象

JavaScript Web APIs

JavaScript Web API JavaScript History API JavaScript Storage API JavaScript Forms API JavaScript Worker API JavaScript Fetch API JavaScript Geolocation API

JavaScript 事件

JavaScript 事件 JavaScript DOM 事件 JavaScript addEventListener() JavaScript 鼠标事件 JavaScript 键盘事件 JavaScript 表单事件 JavaScript 窗口/文档事件 JavaScript 事件委托 JavaScript 事件冒泡 JavaScript 事件捕获 JavaScript 自定义事件

JavaScript 错误处理

JavaScript 错误处理 JavaScript try...catch JavaScript 调试 JavaScript 自定义错误 JavaScript 扩展错误

JavaScript 重要关键字

JavaScript this 关键字 JavaScript void 关键字 JavaScript new 关键字 JavaScript var 关键字

JavaScript HTML DOM

JavaScript HTML DOM JavaScript DOM 方法 &属性 JavaScript DOM 文档 JavaScript DOM 元素 JavaScript DOM 属性 (Attr) JavaScript DOM 表单 JavaScript 修改 HTML JavaScript 修改 CSS JavaScript DOM 动画 JavaScript DOM 导航 JavaScript DOM 集合 JavaScript DOM NodeList JavaScript DOM DOMTokenList

JavaScript 高级章节

JavaScript 冒泡排序算法 JavaScript 循环引用错误 JavaScript 使用 Jest 进行代码测试 JavaScript CORS 处理 JavaScript 数据分析 JavaScript 死区 JavaScript 设计模式 JavaScript Engine 和 Runtime JavaScript 执行上下文 JavaScript 函数组合 JavaScript 不可变性 JavaScript Kaboom.js JavaScript 词法作用域 JavaScript 本地存储 JavaScript 记忆化 JavaScript 压缩 JS JavaScript 可变性 vs 不可变性 JavaScript 包管理器 JavaScript 解析 S 表达式 JavaScript 原型继承 JavaScript 响应式 JavaScript Require 函数 JavaScript Selection API JavaScript SessionStorage JavaScript SQL CRUD 操作 JavaScript 增强排序 JavaScript 临时死区 JavaScript 节流 JavaScript TRPC 库 JavaScript 真值和假值 JavaScript 上传文件 JavaScript 日期比较 JavaScript 递归 JavaScript 数据结构 JavaScript Base64 编码 JavaScript 回调函数 JavaScript 当前日期/时间 JavaScript 日期验证 JavaScript 过滤方法 JavaScript 生成颜色 JavaScript HTTP 请求 JavaScript 插入排序 JavaScript 延迟加载 JavaScript 链表 JavaScript 嵌套循环 JavaScript 空值检查 JavaScript 获取当前 URL JavaScript 图算法 JavaScript 高阶函数 JavaScript 空字符串检查 JavaScript 表单处理 JavaScript 函数式编程 JavaScript 形参 vs 实参 JavaScript 原型 JavaScript 响应式编程 JavaScript Reduce 方法 JavaScript Rest 运算符 JavaScript 短路 JavaScript 未定义检查 JavaScript 单元测试 JavaScript 验证 URL

JavaScript 杂项

JavaScript Ajax JavaScript 异步迭代 JavaScript Atomics 原子对象 JavaScript Rest 参数 JavaScript 页面重定向 JavaScript 对话框 JavaScript 页面打印 JavaScript 表单验证 JavaScript 动画 JavaScript 多媒体 JavaScript 图像映射 JavaScript 浏览器 JavaScript JSON JavaScript 多行字符串 JavaScript 日期格式 JavaScript 获取日期方法 JavaScript 设置日期方法 JavaScript 模块 JavaScript 动态导入 JavaScript BigInt JavaScript Blob JavaScript Unicode JavaScript 浅拷贝 JavaScript 调用堆栈 JavaScript 引用类型 JavaScript IndexedDB JavaScript 点击劫持攻击 JavaScript 柯里化 JavaScript 图形 JavaScript Canvas 画布 JavaScript 防抖 JavaScript 性能 JavaScript 代码风格指南

JavaScript 实用资源

JavaScript 面试题 JavaScript 速查表 JavaScript 函数


JavaScript - 对象概述

JavaScript 对象

JavaScript 对象 是一种非原始数据类型,用于将数据存储为 键值 对。键值对通常称为属性。键值对中的键(也称为"属性名称")是字符串,值可以是任何值。如果属性的值是函数,则该属性称为 方法。

对象使用花括号创建,每个属性用逗号分隔。每个属性的写法为:属性名称后跟冒号 (:),再跟属性值。键值对在对象中并非按特定顺序存储。因此,对象是属性的无序集合,以键值对的形式表示。

JavaScript 是一种面向对象编程 (OOP) 语言。如果一种编程语言能够为开发人员提供四种基本功能,那么它就可以被称为面向对象的。

  • 封装 − 将相关信息(无论是数据还是方法)存储在一个对象中的能力。

  • 抽象 − 向用户隐藏对象实现细节的能力。

  • 继承 − 一个类能够依赖另一个类(或多个类)来实现其某些属性和方法的能力。

  • 多态 − 能够编写一个函数或方法以多种不同方式工作的能力。

让我们详细了解一下 JavaScript 对象。

对象属性

对象属性可以是任何原始数据类型、对象或函数。对象属性通常是对象方法内部使用的变量,但也可以是整个页面中使用的全局可见变量。

向对象添加属性的语法为:-

objectName.objectProperty = propertyValue;

例如 - 以下代码使用 document 对象的 "title" 属性获取文档标题。

var str = document.title;

对象方法

方法是允许对象执行某些操作或允许对其执行某些操作的函数。函数和方法之间有细微的差别:函数是独立的语句单元,而方法附加到对象上,可以通过 this 关键字引用。

方法的用途非常广泛,从将对象的内容显示到屏幕,到对一组本地属性和参数执行复杂的数学运算。

例如 − 下面是一个简单的示例,展示如何使用文档对象的 write() 方法在文档中写入任何内容。

document.write("This is test");

创建新对象

所有用户定义对象和内置对象都是 Object 对象的后代。

我们可以使用对象字面量来创建新的用户定义对象。或者,我们可以创建一个构造函数,然后使用 new 关键字调用该函数来实例化一个对象。

在 JavaScript 中创建对象有多种方法。我们将学习以下所有方法。

  • 使用对象字面量

  • 使用对象构造函数

  • 使用 Object.create() 方法

  • 使用 JavaScript ES6 类

JavaScript 对象字面量

在 JavaScript 中,{} 由对象字面量表示。您可以在花括号之间添加一对键值对来定义一个对象。

您可以按照以下语法使用对象字面量来定义对象。

const obj = {
    key: val,
}

您可以在花括号之间添加键值对。每个键值对以逗号分隔,并且需要在键和值之间添加冒号 (:)。

示例

在下面的示例中,我们定义了一个包含 4 个属性的墙对象。每个属性包含不同数据类型的不同值。

在输出中,您可以观察对象的属性及其值。

<html>
<body>
   <p id = "output"> </p>
   <script>
      const myBook = {
         title: "Perl",
         author: "Mohtashim",
         pages: 355,
      }
      document.getElementById("output").innerHTML =
      "Book name is : " + myBook.title + "<br>"
      +"Book author is : " + myBook.author + "<br>"
      +"Total pages : " + myBook.pages;
   </script>
</body>
</html>

输出

Book name is : Perl
Book author is : Mohtashim
Total pages : 355

JavaScript new 运算符

new 运算符用于创建对象实例。要创建对象,new 运算符后面必须跟构造函数方法。

以下示例中,构造函数方法分别为 Object()、Array() 和 Date()。这些构造函数是 JavaScript 内置函数。

var employee = new Object();
var books = new Array("C++", "Perl", "Java");
var day = new Date("August 15, 1947");

JavaScript Object() 构造函数

构造函数是一个用于创建和初始化对象的函数。JavaScript 提供了一个名为 Object() 的特殊构造函数来构建对象。Object() 构造函数的返回值会被赋值给一个变量。

该变量包含对新对象的引用。分配给对象的属性不是变量,并且未使用 var 关键字定义。

示例

尝试以下示例;它演示了如何创建对象。

<html>
<body>  
   <p id = "output"> </p>
   <script>
      var book = new Object();   // 创建对象
      book.subject = "Perl";     // 为对象分配属性
      book.author  = "Mohtashim";
      document.getElementById("output").innerHTML = 
      "Book name is : " + book.subject + "<br>" + 
      "Book author is : " + book.author;
   </script>   
</body>
</html>

输出

Book name is : Perl
Book author is : Mohtashim

JavaScript 构造函数

在 JavaScript 中,您可以定义一个自定义函数,并将其用作构造函数来定义新对象。此时,自定义函数充当模板。

与 Object() 构造函数相比,自定义用户定义构造函数的优势在于,您可以根据需要向自定义函数添加参数。

以下是使用自定义用户定义构造函数创建对象的简单语法。

// 对象模板
function ConstructorFunc(para) {
    this.para = para;
}
const obj = new ConstructorFunc(arg);

ConstructorFunc() 函数充当对象模板。它使用"this"关键字访问函数上下文,并在函数上下文中定义键。此外,该键使用"para"值初始化。

接下来,您可以将该函数用作构造函数,并使用"new"关键字来定义对象,并将所需的参数传递给构造函数。

示例

此示例演示如何使用用户定义的构造函数函数创建对象。此处,this 关键字用于引用已传递给函数的对象。

<html>
<body>   
   <div id = "output"> </div>
   <script>
      function Book(title, author) {
         this.title = title; 
         this.author  = author;
      }
      const myBook = new Book("Perl", "Mohtashim");
      document.getElementById("output").innerHTML = 
      "Book title is : " + myBook.title + "<br>" +
      "Book author is : " + myBook.author + "<br>";
   </script>      
</body>
</html>

输出

Book title is : Perl
Book author is : Mohtashim

JavaScript Object.create() 方法

Object.create() 方法会根据已定义的对象创建一个新对象。此外,您还可以使用 Object.create() 方法从另一个对象克隆一个对象时,向对象原型添加一些新属性。

请按照以下语法使用 Object.create() 方法定义一个新对象。

const obj = Object.create({}, {
    key: { value: val },
})
  • { − 它是一个空对象。 Object.create() 方法会创建它的一个副本。

  • { key: { value: val }, } − 它是一个对象,包含要添加到克隆对象原型的属性。

示例

在下面的示例中,我们向空对象的原型添加了多个属性。但是,如果您打印该对象,则看不到任何属性,因为它们已添加到原型中。

您可以使用点符号访问对象属性。

<html>
<body>
   <p id = "output"> </p>
   <script>
      const myBook = Object.create({}, {
         title: { value: "Perl" },
         author: { value: "Mohtashim" },
      })
        
      document.getElementById("output").innerHTML = 
      "Book title is : " + myBook.title + "<br>" + 
      "Book author is : " + myBook.author + "<br>";

   </script>
</body>
</html>

输出

Book title is : Perl
Book author is : Mohtashim

JavaScript ES6 类

JavaScript 类是在 ES6 中引入的。JavaScript 类是用于创建对象的模板。类使用"class"关键字定义。定义类时,它类似于函数。class 关键字后面是类名,然后是类主体。

class MyClass{
    //类主体
}

您可以使用 new 运算符通过类创建对象 -

const myObj = new MyClass();

这里的 ClassName 是类的名称,myObject 是使用此类创建的对象的名称。

我们将在下一章详细讨论 JavaScript 类。

定义对象的方法

前面的示例演示了构造函数如何创建对象并赋值属性。但我们需要通过赋值方法来完善对象的定义。

示例

尝试以下示例;它展示了如何在对象中添加函数。

<html>   
  <head>
    <title>User-defined objects</title>
    <script>
      // 定义一个将作为方法工作的函数
      function addPrice(amount) {
        this.price = amount; 
      }

      function Book(title, author) {
        this.title = title;
        this.author  = author;
        this.addPrice = addPrice;  // 将该方法指定为属性。
      }
    </script>      
  </head>

  <body>   
    <div id = "output"> </div>
    <script>
      var myBook = new Book("Perl", "Mohtashim");
      myBook.addPrice(100);

      document.getElementById("output").innerHTML = 
      "Book title is : " + myBook.title + "<br>"
      +"Book author is : " + myBook.author + "<br>"
      +"Book price is : " + myBook.price + "<br>";
    </script>      
  </body>
</html>

输出

Book title is : Perl 
Book author is : Mohtashim 
Book price is : 100

with 关键字

with 关键字 是一种引用对象属性或方法的简写形式。

作为 with 参数指定的对象将成为后续代码块持续时间内的默认对象。对象的属性和方法无需命名即可使用。

语法

with object 的语法如下:-

with (object) {
    不使用对象名称和句点的属性
}

示例

尝试以下示例。

<html>
<head>
  <script>
    // 定义一个将作为方法工作的函数
    function addPrice(amount) {
      with(this) {
        price = amount;
      }
    }
    function Book(title, author) {
      this.title = title;
      this.author = author;
      this.price = 0;
      this.addPrice = addPrice;  // 将该方法指定为属性。
    }
  </script>      
</head>
<body>   
  <div id = "output"></div>
  <script>
    var myBook = new Book("Perl", "Mohtashim");
    myBook.addPrice(100);
         
    document.getElementById("output").innerHTML = 
    "Book title is : " + myBook.title + "<br>"
    +"Book author is : " + myBook.author + "<br>"
    +"Book price is : " + myBook.price + "<br>";
    
  </script>      
</body>
</html>

输出

Book title is : Perl 
Book author is : Mohtashim 
Book price is : 100

JavaScript 原生对象

JavaScript 有多个内置或原生对象。这些对象可以在程序中的任何位置访问,并且在任何操作系统上运行的任何浏览器中都能以相同的方式工作。

以下是所有重要的 JavaScript 原生对象的列表 -

JavaScript 对象方法

这里,我们列出了 JavaScript 对象的方法。

静态方法

这些方法由 Object 类本身调用。

序号 方法 描述
1 assign() 将属性及其值从一个对象复制到另一个对象。
2 create() 使用现有对象作为原型创建一个新对象。
3 defineProperty() 克隆对象并向其原型添加新属性。
4 defineProperties() 在特定对象中定义属性并获取更新后的对象。
5 entries() 返回一个包含 [键,值] 的数组。键值对。
6 freeze() 通过冻结对象来防止添加或更新对象属性。
7 fromEntries() 从 [键, 值] 对数组创建新对象。
8 getOwnPropertyDescriptor() 获取对象属性的属性描述符。
9 getOwnPropertyNames() 获取对象属性。
10 getOwnPropertySymbols() 以数组形式获取对象中存在的所有符号。
11 getPrototypeOf() 获取对象的原型。
12 hasOwn() 检查对象中是否存在特定属性。
13 Object.is() 检查两个对象是否包含相似的值。
14 isExtensible() 检查对象是否可扩展。
15 isFrozen() 检查对象是否冻结。
16 isSealed() 检查对象是否已密封。
17 keys() 以数组格式获取对象的所有键。
18 preventExtensions() 阻止对象原型更新。
19 seal() 密封对象。
20 setPrototypeOf() 设置对象的原型。
21 toLocaleString() 以字符串格式获取对象。
22 values() 以数组格式获取对象的所有值。

实例方法

这些方法使用对象的实例调用。

序号 方法 描述
1 defineGetter() 定义 getter 以获取特定属性值。
2 hasOwnProperty() 检查对象是否具有特定属性作为其自身属性。
3 isPrototypeOf() 检查特定对象是否作为另一个对象的原型存在。
4 propertyIsEnumerable() 检查对象的属性是否可枚举。

对象属性

序号 属性 描述
1 constructor 获取对象构造函数的引用。