JavaScript 笔记 --- part7 --- JS进阶 (part2)
JS进阶(part2)
内置构造函数
-
Object: 用于创建对象
-
String: 用于创建字符串
-
Number: 用于创建数字
-
Array: 用于创建数组
-
Boolean: 用于创建布尔值
-
Function: 用于创建函数
-
Date: 用于创建日期对象
-
RegExp: 用于创建正则表达式对象
-
Error: 用于创建错误对象
-
Map: 用于创建 Map 对象
-
Set: 用于创建 Set 对象
-
WeakMap: 用于创建弱 Map 对象
-
WeakSet: 用于创建弱 Set 对象
-
JSON: 用于将对象转换为 JSON 字符串
const str = "Hello, world!";
const strObj = new String(str); // 两者等价
Object
const obj = {name: "John",age: 25,
};const arr = Object.keys(obj); // 获取对象所有属性名
const arr1 = Object.values(obj); // 获取对象所有属性值
const arr2 = Object.entries(obj); // 获取对象所有属性名和值const obj1 = Object.assign({}, obj); // 复制对象
Object.assign(obj, { gender: "male" }); // 追加属性
对象
创建对象(构造函数)
// 通过new关键字创建对象
const person = new Object();// 构造函数创建对象
function Person(name, age) {this.name = name;this.age = age;
}const person1 = new Person("John", 25); //实例化对象
-
构造函数: 主要用来初始化对象
-
使用场景: 快速创建多个类似的对象
-
约定语法: 首字母大写的函数名表示构造函数
-
构造函数的 this: 指向新创建的对象
实例成员
-
定义: 通过构造函数创建的对象称为实例对象, 实例对象中的属性和方法称为实例成员
-
说明:
- 为构造函数传入参数, 创建结构相同但值不同的对象
- 构造函数创建的实例对象彼此独立互不影响
静态成员
-
定义: 静态成员是指构造函数本身的属性和方法
-
说明:
- 静态成员属于构造函数, 所有实例对象共享同一份静态成员
- 静态成员可以直接通过构造函数访问, 而不需要实例化对象
function Person(name, age) {this.name = name;this.age = age;this.sayAge = function () {console.log(`I am ${this.age} years old`);};
}Person.sayHello = function () {console.log(`Hello, my name is ${this.name}`);
};
字符串
split()
- 定义: 将字符串按照指定分隔符分割成数组, 与数组的 join() 方法相反
const str = "Hello, world!";
const arr = str.split(","); // ["Hello", " world!"]
substring()
- 定义: 返回一个字符串中从 start 位置到 end 位置的子字符串, 索引从 0 开始, 包含 start, 不包含 end
const str = "Hello, world!";
const subStr = str.substring(2, 7); // "llo, "
startsWith()
- 定义: 判断字符串是否以指定字符串开头, 返回布尔值
const str = "Hello, world!";
const result = str.startsWith("Hello"); // true
endsWith()
- 定义: 判断字符串是否以指定字符串结尾, 返回布尔值
const str = "Hello, world!";
const result = str.endsWith("!"); // true
includes()
- 定义: 判断字符串是否包含指定字符串, 返回布尔值
const str = "Hello, world!";
const result = str.includes("world"); // true
repeat()
- 定义: 重复字符串 n 次, 返回重复后的字符串
const str = "Hello";
const result = str.repeat(3); // "HelloHelloHello"
padStart()
- 定义: 在字符串左侧填充指定字符, 直到字符串长度达到指定长度
const str = "Hello";
const result = str.padStart(10, " "); // " Hello"
padEnd()
- 定义: 在字符串右侧填充指定字符, 直到字符串长度达到指定长度
const str = "Hello";
const result = str.padEnd(10, " "); // "Hello "
数字
toFixed()
- 定义: 将数字转换为字符串, 并添加指定小数位数的小数点(四舍五入)
const num = 123.456;
const result = num.toFixed(2); // "123.46"
编程思想
面向过程
- 定义: 面向过程是一种编程思想,强调通过过程来解决问题。
- 特点: 按照步骤一步一步的执行,逐个解决问题。
- 适用场景: 适用于简单的程序,或者对性能要求较高的程序。
- 优点: 代码的可读性、可理解性都得到提高。
- 特性: 数据封装、数据隐藏、信息隐藏。
- 缺点: 代码的可维护性、可扩展性、灵活性都有所欠缺。
面向对象
- 定义: 面向对象是一种编程思想,强调通过对象来解决问题。
- 特点: 按照对象来思考问题,将问题分解成对象,每个对象都有自己的属性和方法。
- 适用场景: 适用于复杂的程序,或者对可扩展性要求较高的程序。
- 优点: 代码的可维护性、可扩展性、灵活性都得到提高。
- 特性: 封装、继承、多态。
- 缺点: 代码的可读性、可理解性都有所欠缺。
原型
构造函数
- 定义: 构造函数是一种特殊的函数,它在创建对象时被调用。
- 它体现了面向对象编程的特点,它可以为对象创建初始状态,并为对象添加属性和方法。
function Person(name, age) {this.name = name;this.age = age;this.sayHello = function () {console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");};const person1 = new Person("John", 25);person1.sayHello(); // Output: Hello, my name is John, I am 25 years old.
}
原型对象
- 定义: 原型是一种特殊的对象,它包含了所有实例对象的共有属性和方法。
- 它体现了面向对象编程的另一种特点,它可以让对象共享属性和方法。
- this 关键字在构造函数中指向实例对象,在原型对象中也指向
实例对象。
function Person(name, age) {this.name = name;this.age = age;
}Person.prototype.sayHello = function () { // 原型对象: prototypeconsole.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
};const person1 = new Person("John", 25);
person1.sayHello(); // Output: Hello, my name is John, I am 25 years old.const person2 = new Person("Mary", 30);
person2.sayHello(); // Output: Hello, my name is Mary, I am 30 years old.
- constructor 属性指向构造函数。
function Person(name, age) {this.name = name;this.age = age;
}Person.prototype = {constructor: Person, // 在使用赋值方式时,需要添加constructor属性来指向构造函数, 注意不要漏掉逗号sayHello: function () {console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");},
};Person.prototype.SayHello = function () {console.log("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
}; // 原型对象中添加方法, 此时不需要添加constructor属性
对象原型
- 定义: 对象都会有一个属性__proto__,它指向构造函数的prototype原型对象。
-
prototype: 构造函数的原型对象
-
constructor: 指向构造函数
-
proto: 在实例对象上指向原型对象(prototype)
原型继承
- 作用: 不使用同一个对象, 但是不同对象里面有相同的方法和属性, 这样就可以节省内存空间。
function Person(name, age) {this.name = name;this.age = age;
}function Woman(){};
function Man(){};Man.prototype = new Person(); // 原型继承
Woman.prototype = new Person(); // 原型继承
原型链
-
定义: 原型链是一种对象之间的关系,它通过__proto__属性连接起来。
-
它体现了面向对象编程的第三种特点,它可以让对象调用另一个对象的属性和方法。
-
规则:
- 只要是对象就有__proto__属性, 这个属性指向它的原型对象。
- 只要是原型对象, 它都有constructor属性, 这个属性指向它的构造函数。
instanceof 运算符
- 作用: 用来判断一个对象是否是另一个对象的实例。
function Person(name, age) {this.name = name;this.age = age;
}const person1 = new Person("John", 25);console.log(person1 instanceof Person); // true
console.log(person1 instanceof Object); // true
console.log(person1 instanceof Array); // false