JavaScript基础知识(二)

news2024/11/24 10:58:51

JavaScript基础知识(二)

  • 一、ES2015 基础语法
    • 1.变量
    • 2.常量
    • 3.模板字符串
    • 4.结构赋值
  • 二、函数进阶
    • 1. 设置默认参数值
    • 2. 立即执行函数
    • 3. 闭包
    • 4. 箭头函数
  • 三、面向对象
    • 1.面向对象概述
    • 2.基本概念
    • 3.新语法与旧语法
    • 4.ES5 面向对象的知识
      • 4.1 ES5构造函数
      • 4.2 原型对象
      • 4.3 原型链(继承)
    • 5.ES6 面向对象的知识
      • 5.1 Class关键字
      • 5.2 继承


一、ES2015 基础语法

1.变量

使用 let 代替 var

let 的优点:

  • 块级作用域;
{
  var str = 'hello world';
}
console.log(str);     //  hello world

{
  let str = 'hello world';
}
console.log(str);     //  报错:str is not defined
  • 不存在变量提升;
console.log(str);
var str = 'hello world';    // undefined

console.log(str);
let str = 'hello world';    // 报错:Cannot access 'str' before initialization
  • 不允许重复声明。
var num = 10;
var num = 20;
console.log(num);     // 20

let num = 10;
let num = 20;
console.log(num);     // 报错:Identifier 'num' has already been declared

总的来说,let 会让变量声明更加规范。

2.常量

使用 const 定义 常量(即不变的值)。
定义之后不可以修改:

const num = 10;
num = 20;
console.log(num);    //   报错:Assignment to constant variable.

使用 const 声明的几种情况:

  • 不变的值;
const PI = 3.14;
console.log(PI);    //   3.14
  • 函数表达式;
const fun = function (a, b) {
    return a + b;
}
fun(1, 1);
  • 对象;
function getStundent(){
    return {
        name: 'Lulu',
        age: 20
    }
}
// 对象声明可以使用常量
const student = getStundent();
// 虽然是常量,但是对象里面的属性可以改变
student.name = 'Mary';
console.log(student.name);    // 'Mary'
  • 引入外部模块。
const express = require('express');

3.模板字符串

语法:

// 反引号 ``
let str = `hello world`;
console.log(str);      // hello world

优点:

  • 支持换行:
let str = `hello
world`;
console.log(str);

在这里插入图片描述

  • 支持嵌入变量,${} 连接字符串:
let year = "2023";
let month = "08";
let date = "08";
// 拼接成 "2023年08月08日" 
let result = `${year}${month}${date}`
console.log(result);     // 2023年08月08日

4.结构赋值

  • 数组的解构赋值:
// let n = 10;
// let m = 20;
let [n, m] = [10, 20];
console.log(n);   // 10
console.log(m);	  // 20

示例:交换 n 和 m 的值。

let n = 10;
let m = 20;
// 交换
[n, m] = [m, n];
console.log(n);   // 20
console.log(m);   // 10
  • 对象的结构赋值:
// let obj = {name: "xiaoming", age: 10};
// let name = obj.name;
// let age = obj.name;
let { name, age } = { name: "xiaoming", age: 10 };
// 如果颠倒 name,age的顺序并不会影响结果:
// let { age, name } = { name: "xiaoming", age: 10 };  

console.log(name);   // xiaoming
console.log(age);    // 10
  • 通过解构赋值传递参数:
// function getName(obj) {
//    return obj.name
//}
function getName({name, age}) {
	// name  ==> obj.name
	// age  ==> obj.age
    return name
}
let result = getName({name: 'xiaoming', age: 10});
console.log(result);     // xiaoming

二、函数进阶

1. 设置默认参数值

ES2015 的语法可以为函数的参数设置默认值:

function fun(x = 10, y = 20) {
  return x + y;
}

fun();    // 30
fun(1);   // 21
fun(1020);   // 30
  • 未传递参数和未设置默认参数值时:
function fun(x, y) {
  console.log(x); // undefind
  console.log(y); // undefind
  return x + y;
}
let result = fun();
console.log(result);   // NaN

2. 立即执行函数

(function () {
  let a = 10;
  let b = 20;
  console.log(a + b);
})();
// 30
  • 功能:封装代码。
  • 特点:
    声明之后可以直接调用;
    不可以多次调用;
    某些第三方库实现封装。

作用域链:

  • 每一个函数都会创建一个新的作用域;
  • 函数外部无法访问函数内部的值;
  • 函数内部的值可以访问函数外部的值(如果内部找不到值就去外部一层一层找)。

示例:树状图。

|-window
| |-str
| |-fun1
| | |-str
| | |-num
| | |-fun2
| | | |-str
| | | |-num
let str = "hello";
function fun1() {
  let str = "world";
  let num = 10; 

  function fun2() {
  	let str = 'fun2';
  	let num = 20;
    console.log(str); // fun2
    console.log(num); // 20
  }
  fun2();
  console.log(str); // world
  console.log(num); // 10
}

fun1();  
console.log(str); // hello

3. 闭包

  • 闭包函数:声明在一个函数中的函数,叫做闭包函数。
  • 闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回之后。
  • 闭包的特性: 内部函数未执行完,外部函数即使执行完成,外部函数中的变量也不会被销毁。

示例1:想要在 fun1 的外部打印 fun2 的结果。

function fun1() {
  function fun2() {
    console.log("I'm fun2");
  }
}

利用 return在函数外部调用 fun2。

function fun1() {
  function fun2() {
    console.log("I'm fun2");
  }
  // 闭包的精华:return
  return fun2;
}

const f = fun1(); 
f();    // I'm fun2

示例2:想要在 fun1 的外部求和。

function fun1() {
  let n = 10;
  let m = 20;
  function fun2() {
    return n + m;
  }
  return fun2;
}
const f = fun1(); // fun1的运行结果是fun2
let result = f();
console.log(result);  // 30

代码封装:
ES5 的一个模块化的语法。

const module = (function () {
  let a = 10;
  let b = 20;
  function add() {
    return a + b;
  }
  return add;
})();

4. 箭头函数

作用: 简化写法。

const add = function (x) {
  return x * x;
};

//简化
const add = (x) => {
  return x * x;
};

//简化
//         参数   返回值
const fun = x => x * x;

示例:每秒输出一次名字。

const cat = {
  name: "miaomiao",
  sayName() {
  	let self = thissetInterval(function () {
    	// window调用的setInterval
    	// this 指向 window,所以需要提前保存
    	console.log(self.name);
    }, 1000)
  },
  // 使用箭头函数:
  sayName() {
    // 箭头函数:在哪里定义,this 就指向谁
    setInterval(() => {
      // this 指向 cat
      console.log(this.name);
    }, 1000);
  },
};
cat.sayName();  // miaomiao
  • 使用 function 定义的函数, this 取决于调用的函数;
  • 使用箭头函数, this 取决于函数定义的位置;

箭头函数和普通函数的 this 指向不同:

  • 普通函数指向的是 调用该函数的对象
  • 箭头函数是 在哪里定义,this 就指向谁

三、面向对象

1.面向对象概述

面向对象是一种编程思想,这种编程思想可以当做一个学科来研究。

除了 JavaScript,例如 C++、Java、Python、PHP 等等编程语言都可以使用这种面向对象的编程思想来开发应用程序。

2.基本概念

:类型、模板、统称。(狗类、鸟类)

对象:是类的一个实例,会具体到某一个事物上(天上飞的那只鸟,我家的那只猫)

继承:狗类继承至哺乳动物类,猫类也继承至哺乳动物类,继承后,子类可以使用父类的属性和方法。

3.新语法与旧语法

  • ES5 面向对象语法:prototype
  • ES6(2015) :面向对象语法

4.ES5 面向对象的知识

构造函数:用于创建对象的函数。
原型对象:prototype。
原型链:实现继承。

4.1 ES5构造函数

构造函数的函数名,首字母大写,如Person,Array,Function等…;

构造函数是用来创建对象用的。

// 构造函数
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 创建了一个对象,Person的实例
var person = new Person("hll", 18); 
console.log(person.name);

4.2 原型对象

通过设置构造函数的 prototype 属性,可以扩展构造函数生成的对象。
通过原型对象,为构造函数生成的对象赋予新的方法

Person.prototype.sayName = function () {
	// this指向有构造函数生成的实例 person
	console.log(`我的名字是${this.name}`);
}; 

Array.prototype.sayHello = function () { 
	// this指向有构造函数生成的实例 arr
	console.log(你好,我的长度是${this.length}!); 
} 
let arr = [1, 2, 3, 4, 5, 1, 2, 3]; 
arr.sayHello();
// 你好,我的长度是 8

4.3 原型链(继承)

// 将子类的原型指向父类的实例
Student.prototype = new Person()
function Person(name) {
  this.name = name;
}
Person.prototype.sayName = function () {
  console.log(`你好,我是${this.name}`);
};

function Student(name) {
  this.name = name;
}
// 将子类的原型指向父类的实例
// 这样子类就可以继承并使用父类的方法
Student.prototype = new Person();

var student = new Student("Mary");
student.sayName();
// 你好,我是 Mary

5.ES6 面向对象的知识

5.1 Class关键字

ES6声明构造函数的语法是通过 classconstructor

class Person {
  // 变量写在 constructor 函数里面
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  // 方法
  sayName() {
    console.log(`我是${this.name}`);
  }
}

let person = new Person("Lisa", 18);
person.sayName();
// 我是Lisa

5.2 继承

extends 关键字
super
语法:class Student extends Person {…}

class Person {
  constructor(name) {
    this.name = name;
  }
  sayName() {
    console.log(`我是${this.name}`);
  }
}
// ES6 继承 extends关键字
class Student extends Person {
  constructor(name, age) {
    //父级的属性 super关键字
    super(name);
    // 子级的就用this 关键字
    this.age = age;
  }
}

let student = new Student("Jacky", 22);
student.sayName(); //我是Jacky
console.log(student.age); //22

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一秒开挂!工厂模式让你告别重复代码!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、工…

大模型开发07:LangChain 开发基础

大模型开发07:LangChain 开发基础 一、Model I/O 输入输出 任何语言模型应用程序的核心元素是什么?LangChain 提供了与任何语言模型交互的构建块。 Prompts: 模板化、动态选择和管理模型输入Language models: 通过通用的接口访问大模型Output parsers: 大模型输出解析模板化…

Oracle Enterprise Manager 认证列表

认证列表的查找方法参见Accessing the Enterprise Manager Certification Matrix。 认证分为对于OMS的,和对于Agent的。 OMS和Agent的描述见这里。 Oracle Management Agent The Management Agent is an integral software component that enables you to conver…

开源微信小程序商城源码PHP带后台管理——构建高效电商平台的基石

随着移动互联网的快速发展,微信小程序作为一种新型的电商形态,正逐渐成为商业领域的一种重要力量。对于许多商家来说,拥有一个功能完善、安全可靠的小程序商城源码至关重要。分享一款开源的微信小程序商城源码PHP,春哥七合一DIY小…

协作机器人应用场景

UR 双臂协作机器人在有人环境中 作业 ABB 双臂协作机器人进行医疗康复作业 KUKA iiwa 协作机器人拖动示教作业 机器人 – 环境物理交互控制要 求机器人具有力感知能力!! 在传 统的操作任务中,机械臂末端的静态 接触力可以通过多维力传感器…

【什么是高斯分布?还有什么分布?他们的用途是什么?】

高斯分布 高斯分布,也被称为正态分布或钟形曲线,是统计学中最为常见和重要的连续概率分布之一。高斯分布的概率密度函数(PDF)是: 其中: ( x ) 是变量( \mu ) 是分布的均值(mean)( \sigma ) 是标准差(standard deviation)( \sigma^2 ) 是方差(variance)以下是关于高…

#1024程序员节# 大家一起努力

1024,一年一度的程序员节,俗称“爱码士节”。 1024是2的十次方,二进制计数的基本计量单位之一,1G1024M,而1G与1级谐音,也是一级棒的意思~。程序员(英文Programmer)是从事程序开发、维护的专业人员。 程序员…

QCC Tx 发射器(source)通话(麦克风输入)切换

QCC Tx 发射器(source)通话(麦克风输入)切换 1.QCC(QCC3056) Tx 发射器(source)连接BT 接收设备(Sink)QCC USB声卡自动识别音乐或者通话,通过蓝牙传输到BT 接收设备&…

【RocketMQ集群】Linux搭建RocketMQ双主双从集群

在当今大数据时代,消息队列系统成为了构建高可用、可扩展和可靠的分布式应用的重要组件之一。而Apache RocketMQ作为一款开源的分布式消息中间件,以其高吞吐量、低延迟和可靠性而备受青睐。为了满足大规模应用的需求,搭建RocketMQ集群是一种常…

腾讯共享WiFi贴项目推广员是怎么收益的?

腾讯共享WiFi贴项目是一种非常普遍的商业共享模式,它为用户提供了便携、高速的无线网络服务。然而,人们对于这种项目是否真的能让共享WiFi贴推广员挣到钱还存在疑问。 腾讯共享WiFi贴扫码项目的运作方式是这样的:推广员将WiFi贴二维码粘贴到商…

“香蕉大王”的转型升级,能否扩大市场份额?

佳农食品控股 ( 集团 ) 股份有限公司,于2023年10月11日同海通证券签署上市辅导协议,计划登陆上交所主板。据了解这已经不是佳农食品第一次IPO了,2019 年,佳农集团曾向上交所递交过招股说明书,当时的招股书披露,佳农集团…

柴油发电机测试的工作原理

柴油发电机测试的工作原理是通过对柴油发电机进行一系列的性能测试和功能检查,以确保其正常运行和可靠性,通过加载发电机负载,测试发电机的额定功率、最大功率和稳定性。这可以通过连接负载设备,如电阻箱或电动机,来模…

03.MySQL事务及存储引擎笔记

事务 查看/设置事务 select autocommit; --查看当前数据库的事务状态,1表示开启,0表示关闭 set autocommit 0; --关闭自动事务提交采用关闭自动事务提交我们就可以手动进行事务提交,但是这种设置方式是对整个数据库起作用,一些可…

CMake学习(二):使用CMake构建包含其他库的C++项目

文章目录 一. 构建一个包含其他库的项目二. 构建过程1. 创建程序源文件2. 构建项目并编译源代码 附件 一. 构建一个包含其他库的项目 CMake学习(一):使用CMake构建一个简单的C项目 在这上一篇文章中,我们已经了解了如何使用CMake创建一个基本项目。在这…

华为数通方向HCIP-DataCom H12-831题库(多选题:21-40)

第21题 网络管理员A希望使用ACL匹配特定的路由条目,请问以下哪些路由条目将被图中的ACL规侧匹配? acl number 2000 rule 10 permit source 10.0.0.0 0.0.6.0A、10.0.0.1/32 B、10.0.0.0/24 C、10.0.1.0/24 D、10.0.2.0/24 答案: 解析: 通配符十进制6转换二进制为00000110,…

从Excel到智能化:智能报表的演进与未来发展趋势

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 报表的迭代历程 报表工具的诞生与计算机技术的出现和信息技术的进步密不可分。下图是报…

javascript追加标签

页面样式(初始化): 开头追加标签: 结尾追加标签: 开头结尾追加标签: js代码: 样式展示: js追加标签

议题征集|The Open Group 2023亚太区年度颁奖盛典暨ESG架构年度大会诚邀演讲嘉宾!

每个人心中 都有各自对ESG架构管理的想象与理解 我们期待用一场汇聚 真知灼见与探索实践的盛典 重新定义架构的奇妙 ▼ 在全球可持续发展浪潮下,ESG目标(环境、社会和治理)的重要性愈发凸显。越来越多的企业认识到,以ESG为基…

第二十章 综合案例——基于多态的职工管理系统

1、管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责&…

Python —— hou.NetworkItem class

在一个network内,所有可见元素的基类; 此类没有方法,仅作为 hou.NetworkMovabelItem、hou.NodeConnection 基类存在,这两个子类在网络编辑器内均是可见的,是没有真正有意义的基类的;通过提供一个公共的基类…