JavaScript学习笔记(六)

37、JavaScript 错误 - Throw 和 Try to Catch

  • try 语句使您能够测试代码块中的错误。

  • catch 语句允许您处理错误。

  • throw 语句允许您创建自定义错误。

  • finally 使您能够执行代码,在 trycatch 之后,无论结果如何。

37.1 JavaScript try 和 catch

  • try 语句允许您定义一个代码块,以便在执行时检测错误。

  • catch 语句允许你定义一个要执行的代码块,如果 try 代码块中发生错误。

  • 语法:

try {供测试的代码块
}catch(err) {处理错误的代码块
} 

示例:

<body><p id="demo"></p><script>try {addd("hello");} catch (err) {document.getElementById("demo").innerHTML = err.message;}</script></body>

输出:addd is not defined

37.2 throw 语句

  • throw 语句允许您创建自定义错误。

  • 从技术上讲您能够抛出异常(抛出错误)。

  • 异常可以是 JavaScript 字符串、数字、布尔或对象。

  • 如果把 throwtrycatch 一同使用,就可以控制程序流并生成自定义错误消息。

<body><input type="text" id="demo" /><button type="button" onclick="myFunction()">检测输入</button><p id="intro"></p><script>function myFunction() {var inputMess = document.getElementById("demo").value;try {//是否是数字if (isNaN(inputMess)) {throw "请输入数字";}if (inputMess == "") {throw "请输入内容";}if (Number(inputMess) < 5) {throw "太小";}if (Number(inputMess) > 10) {throw "太大";}} catch (err) {document.getElementById("intro").innerHTML = err;}}</script></body>

37.3 finally 语句

  • finally 语句允许您在 trycatch 之后执行代码,无论结果。
  • 语法:
try {// 供测试的代码块
}catch(err) {// 处理错误的代码块
} 
finally {// 无论结果如何都执行的代码块
}

37.5 Error 对象

Error 对象

38、JavaScript 作用域

  • 局部作用域
  • 全局作用域
    JavaScript 作用域

39、JavaScript 严格模式

JavaScript 严格模式

40、JavaScript this 关键词

JavaScript this 关键词指的是它所属的对象。

它拥有不同的值,具体取决于它的使用位置:

  • 在方法中,this 指的是所有者对象。
  • 单独的情况下,this 指的是全局对象。
  • 在函数中,this 指的是全局对象。
  • 在函数中,严格模式下,thisundefined
  • 在事件中,this 指的是接收事件的元素。
    call()apply() 这样的方法可以将 this 引用到任何对象。

40.1 方法中的 this

  • 在对象方法中,this 指的是此方法的“拥有者”。

  • 在本页最上面的例子中,this 指的是 person 对象。、、

<body><p id="demo"></p><script>var person = {firstName: "文",lastName: "阿花",age: "20",fullName: function () {return this.firstName + this.lastName;},};document.getElementById("demo").innerHTML = person.fullName();</script></body>

输出:文阿花

40.2 单独的 this

  • 在单独使用时,拥有者是全局对象,因此 this 指的是全局对象。
<body><p id="demo"></p><script>
var x = this;
document.getElementById("demo").innerHTML = x;
</script></body>

输出:[object Window]

40.3 函数中的 this(默认)

  • 在 JavaScript 函数中,函数的拥有者默认绑定 this
<body><p id="demo"></p><script>function myFunction() {return this;}document.getElementById("demo").innerHTML = myFunction();</script></body>

输出:[object Window]

40.4 事件处理程序中的 this

  • 在 HTML 事件处理程序中,this 指的是接收此事件的 HTML 元素
 <button onclick="this.style.display='none'">单击来删除我</button>

40.5 对象方法绑定

在此例中,this 是 person 对象(person 对象是该函数的“拥有者”):

 <body><p id="demo"></p><script>// 创建对象:var person = {firstName: "Bill",lastName: "Gates",id: 678,myFunction: function () {return this;},};// 显示来自对象的数据:document.getElementById("demo").innerHTML = person.myFunction();</script></body>

输出:[object Object]

40.6 显式函数绑定

  • call()apply() 方法是预定义的 JavaScript 方法。

  • 它们都可以用于将另一个对象作为参数调用对象方法。

  • 您可以在本教程后面阅读有关 call()apply() 的更多内容。

<body><p id="demo"></p><script>var person1 = {fullName: function () {return this.firstName + this.lastName;},};var person2 = {firstName: "文",lastName: "阿花",};document.getElementById("demo").innerHTML =person1.fullName.call(person2);</script></body>

输出:文阿花

41、JavaScript 箭头函数

  • ES6 中引入了箭头函数。

  • 箭头函数允许我们编写更短的函数

  • 语法:

let myFunction = (a, b) => a * b;

示例一:

 <body><p id="demo"></p><script>let myFunction = (a, b) => a * b;document.getElementById("demo").innerHTML = myFunction(4, 5);</script></body>

输出:20

示例二:

 <body><p id="demo"></p><script>var hello;hello = function () {return "Welcome China";};document.getElementById("demo").innerHTML = hello();</script></body>

使用箭头函数后:

hello = () => {return "Welcome China";
};

42、JavaScript 类

  • 请使用关键字 class 创建类。

  • 请始终添加名为 constructor() 的方法:

语法:

class ClassName {constructor() { ... }
}

示例:

 <body><script>class myDemo {constructor(name, yeasr) {this.name = name;this.yeasr = yeasr;}}</script></body>
  • JavaScript 类不是对象。它只是 JavaScript 对象的模板

42.1 使用类

下面的例子使用 myDemo类创建了两个 myDemo对象。

在创建新对象时会自动调用 constructor 方法。

<body><p id="demo"></p><script>class myDemo {constructor(name, yeasr) {this.name = name;this.yeasr = yeasr;}}var myBoys = new myDemo("张三", "2024");document.getElementById("demo").innerHTML =myBoys.name + " " + myBoys.yeasr;</script></body>

输出:张三 2024

42.2 Constructor 方法

构造方法是一种特殊的方法:

  • 它必须拥有确切名称的“构造函数”
  • 创建新对象时自动执行
  • 用于初始化对象属性
  • 如果未定义构造函数方法,JavaScript 会添加空的构造函数方法。

42.3 Class 方法

  • 类方法的创建
  • 语法:

与对象方法相同。

请使用关键字 class 创建类。

请始终添加 constructor() 方法。

然后添加任意数量的方法。

class ClassName {constructor() { ... }method_1() { ... }method_2() { ... }method_3() { ... }
}

示例(1):创建名为 “age” 的类方法,它返回车龄:

<body><p id="demo"></p><script>class myDemo {constructor(name, yeasr) {this.name = name;this.yeasr = yeasr;}age() {let date = new Date();//date.getFullYear()  返回当前年return date.getFullYear() - this.yeasr;}}var myBoys = new myDemo("张三", 2014);document.getElementById("demo").innerHTML = "年纪为:" + myBoys.age();</script></body>

输出:年纪为:10

示例(2):您可以向类方法发送参数:

 <body><p id="demo"></p><script>class myDemo {constructor(name, yeasr) {this.name = name;this.yeasr = yeasr;}age(x) {return x - this.yeasr;}}let date = new Date();//date.getFullYear()  返回当前年let year = date.getFullYear();var myBoys = new myDemo("张三", 2014);document.getElementById("demo").innerHTML = "年纪为:" + myBoys.age(year);</script></body>

输出:年纪为:10

43 、JavaScript 模块(待补充)

43.1 模块(Modules)

  • ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。

  • JavaScript 模块允许您将代码分解成单独的文件。这会使维护代码库更加容易。

  • 模块是使用 import 语句从外部文件导入的。模块还依赖于 <script> 标签中的 type="module"

43.2 export 命令

  • 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。

JavaScript 模块

44、补充

JavaScript JSON
JavaScript 调试
JavaScript 样式指南
JavaScript 最佳实践

JavaScript 常见错误
JavaScript 性能

45、对象(知识补充)

45.1 JavaScript 对象访问器

  • ECMAScript 5 (2009) 引入了 Getter 和 Setter。

  • Getter 和 Setter 允许您定义对象访问器(被计算的属性)。

45.1.1 JavaScript Getter(get 关键词)

示例:本例使用 lang 属性来获取 age属性的值:

 <body><p id="demo"></p><script>var perdson = {firstName: "文",lastName: "阿花",age: 25,get lang() {return this.age;},};document.getElementById("demo").innerHTML = perdson.lang;</script></body>

输出:25

45.1.2 JavaScript Setter(set 关键词)

示例:本例使用 lang 属性来设置 language 属性的值:

 <body><p id="demo"></p><script>var perdson = {firstName: "文",lastName: "阿花",age: "",set lang(lang) {return (this.age = lang);},};perdson.lang = "25";document.getElementById("demo").innerHTML = perdson.age;</script></body>

输出:25

45.2 JavaScript 函数还是 Getter?

下面两个例子的区别在哪里?

 <body><p id="demo"></p><script>var perdson = {firstName: "文",lastName: "阿花",fullName: function () {return this.firstName + this.lastName;},};document.getElementById("demo").innerHTML = perdson.fullName();</script></body>
  <body><p id="demo"></p><script>var perdson = {firstName: "文",lastName: "阿花",// fullName: function () {//   return this.firstName + this.lastName;// },get fullName() {return this.firstName + this.lastName;},};document.getElementById("demo").innerHTML = perdson.fullName;</script></body>

例子 1 以函数形式访问 fullName:person.fullName()。

例子 2 以属性形式访问 fullName:person.fullName。

第二个例子提供了更简洁的语法。

45.3 为什么使用 Getter 和 Setter?

  • 它提供了更简洁的语法
  • 它允许属性和方法的语法相同
  • 它可以确保更好的数据质量
  • 有利于后台工作

45.4 JavaScript 对象构造器

示例:

<body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//创建Person 对象var myPerson = new Person("文", "阿花", 25);document.getElementById("demo").innerHTML ="姓名:" +myPerson.firstName +myPerson.lastName +"<br>年龄:" +myPerson.old;</script></body>

输出:
姓名:文阿花
年龄:25

45.5 为对象添加属性

示例:为Person对象添加birthday 属性:

<body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//创建Person 对象var myPerson = new Person("文", "阿花", 25);//为对象添加属性myPerson.birthday = "2020-04-21";document.getElementById("demo").innerHTML ="姓名:" +myPerson.firstName +myPerson.lastName +"<br>年龄:" +myPerson.old +"<br>生日:" +myPerson.birthday;</script></body>

输出:姓名:文阿花
年龄:25
生日:2020-04-21

45.6 为对象添加方法

示例:添加获取完整姓名的方法:

  <body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//创建Person 对象var myPerson = new Person("文", "阿花", 25);//为对象添加属性myPerson.birthday = "2020-04-21";//为对象添加方法myPerson.fullName = function () {return this.firstName + this.lastName;};document.getElementById("demo").innerHTML ="姓名:" +myPerson.fullName() +"<br>年龄:" +myPerson.old +"<br>生日:" +myPerson.birthday;</script></body>

输出:姓名:文阿花
年龄:25
生日:2020-04-21

45.7 构造器添加属性

  • 与向已有对象添加新属性不同,您无法为对象构造器添加新属性
    示例:
  <body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//尝试为构造器添加属性Person.birthday = "2020-04-21";//创建Person 对象var myPerson = new Person("文", "阿花", 25);document.getElementById("demo").innerHTML ="生日:" + myPerson.birthday;</script></body>

输出:生日:undefined

  • 如需向构造器添加一个新属性,您必须添加到构造器函数:
 <body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;//添加属性this.birthday = "2020-04-21";}//创建Person 对象var myPerson = new Person("文", "阿花", 25);document.getElementById("demo").innerHTML =myPerson.old + "<br>生日:" + myPerson.birthday;</script></body>

输出:25
生日:2020-04-21

  • JavaScript prototype 属性允许您为对象构造器添加新属性:
<body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//创建Person 对象var myPerson = new Person("文", "阿花", 25);//使用JavaScript prototype 属性允许您为对象构造器添加新属性:Person.prototype.birthday = "2000-09-18";document.getElementById("demo").innerHTML =myPerson.firstName +myPerson.lastName +"<br>生日:" +myPerson.birthday;</script></body>

输出:
文阿花
生日:2000-09-18

45.8 为构造器添加方法

  • 与向已有对象添加新方法不同,您无法为对象构造器添加新方法。
  • 必须在构造器函数内部向一个对象添加方法:
  <body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;//添加属性this.birthday = "2020-04-21";//添加方法this.fullName = function () {return this.firstName + this.lastName;};}//创建Person 对象var myPerson = new Person("文", "阿花", 25);document.getElementById("demo").innerHTML =myPerson.fullName() + "<br>生日:" + myPerson.birthday;</script></body>

输出:文阿花
生日:2020-04-21

  • JavaScript prototype 属性也允许您为对象构造器添加新方法:
<body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;}//创建Person 对象var myPerson = new Person("文", "阿花", 25);//使用JavaScript prototype 属性允许您为对象构造器添加新属性:Person.prototype.birthday = "2000-09-18";//JavaScript prototype 属性也允许您为对象构造器添加新方法:Person.prototype.fullName = function () {return this.firstName + this.lastName;};document.getElementById("demo").innerHTML =myPerson.fullName() + "<br>生日:" + myPerson.birthday;</script></body>

输出:文阿花
生日:2000-09-18

  • 修改方法对应的值:
<body><p id="demo"></p><script>//创建 Person 对象的构造器函数function Person(first, last, age) {this.firstName = first;this.lastName = last;this.old = age;//添加属性this.birthday = "2020-04-21";//添加方法this.changeName = function (name) {this.lastName = name;};}//创建Person 对象var myPerson = new Person("文", "阿花", 25);//修改方法的值myPerson.changeName("哈哈");document.getElementById("demo").innerHTML =myPerson.firstName +myPerson.lastName +"<br>生日:" +myPerson.birthday;</script></body>

输出:文哈哈
生日:2020-04-21

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

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

相关文章

第57期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Datawhale - 角色要素提取竞赛

文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1&#xff1a;下载相关库Step2&#xff1a;配置导入Step3&#xff1a;模型测试Step4&#xff1a;数据读取Step5&#xff1a;Prompt设…

Yi-1.5 9B Chat 上线Amazon SageMaker JumpStart

你是否对简单的API调用大模型感到不满足&#xff1f;是否因为无法亲自部署属于自己的大模型而烦恼&#xff1f; 好消息来了&#xff0c;Amazon SageMaker JumpStart 初体验 CloudLab实验上线啦&#xff01; 本实验将以零一万物最新发布的中文基础模型 Yi-1.5 9B Chat 为例&am…

kettle从入门到精通 第七十四课 ETL之kettle kettle调用https接口教程,忽略SSL校验

场景&#xff1a;kettle调用https接口&#xff0c;跳过校验SSL。&#xff08;有些公司内部系统之间的https的接口是没有SSL校验这一说&#xff0c;无需使用用证书的&#xff09; 解决方案&#xff1a;自定义插件或者自定义jar包通过javascript调用https接口。 1、http post 步…

嵌入式UI开发-lvgl+wsl2+vscode系列:8、控件(Widgets)(一)

一、前言 这里将介绍一系列控件&#xff0c;了解后就可以开始基础的开发了。 二、示例 1、Base Obj&#xff08;基础对象&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_BUILD_EXAMPLESvoid lv_example_obj_1(void) {lv_obj_t * obj1;obj1 lv…

Python容器 之 列表--列表的常用操作方法

1.查询相关方法&#xff1a;index()、count() &#xff08;1&#xff09;index() 说明&#xff1a; 和 字符串中的 find() 的作用是一样 列表中是没有 find() 方法的, 只有 index() 方法&#xff1b;字符串中 同时存在 find() 和 index() 方法 格式&#xff1a;列表.index(要查…

你必须要知道的自闭症知识,推荐收藏

自闭症&#xff0c;一种日益受到关注的神经发育障碍&#xff0c;对于许多人来说&#xff0c;仍充满了神秘和误解。以下是 12 个你必须知道的关于自闭症的重要知识点&#xff1a; 1、自闭症并非心理问题 自闭症是一种生理上的神经发育障碍&#xff0c;不是由于孩…

亚马逊TM商标跟卖,同行截流采集,人工手动跟卖选品更方便!

区分TM标&#xff0c;软件自动查询&#xff0c;人工手动查询方便。 大家好&#xff0c;跟大家说下如何区分TM标。 选择相对于的站点&#xff0c;选择TM。 软件采集出来的已备案、未备案TMR标&#xff0c;现在点击TM标就会跳到美国商标局。 可以清晰的看到这个地方只有一个序…

张颂文百花提名,男配界笑出“颂”彩

在这个星光熠熠的百花奖舞台上&#xff0c; 张颂文老师犹如一坛陈年老酒&#xff0c;越品越有味&#xff0c; 竟不声不响地提名了最佳男配角&#xff01;这下可好&#xff0c; 男配界仿佛一夜之间被“颂”风吹得花枝乱颤&#xff0c;笑料百出。你说张颂文老师这演技&#xf…

DreamTech联合南大和牛津发布最强3D内容生成大模型——Direct3D

文章链接&#xff1a;https://arxiv.org/pdf/2405.14832 github链接&#xff1a;https://nju-3dv.github.io/projects/Direct3D/ 从文本和图像生成高质量的3D资产一直是一项挑战&#xff0c;主要是由于缺乏能够捕捉复杂几何分布的可扩展3D表示。在这项工作中&#xff0c;介绍…

详解反向传播(BP)算法

文章目录 what&#xff08;是什么&#xff09;where&#xff08;用在哪&#xff09;How&#xff08;原理&&怎么用&#xff09;原理以及推导过程pytorch中的反向传播 what&#xff08;是什么&#xff09; 反向传播算法&#xff08;Backpropagation&#xff09;是一种用于…

自动驾驶水泥搅拌车在梁场的应用(下)

自动驾驶水泥搅拌车在梁场的应用&#xff08;下&#xff09; 北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场&#xff08;也称为预制梁场&#xff09;的应用可以带来多方面的优势和效益&#xff1a; 1. 自动化搅拌和运输 在梁场中&#xff0c;通常需要大量的混凝土搅…

自动化一些操作

下拉选择框 from selenium import webdriver from time import sleep # 导包 from selenium.webdriver.support.select import Select driver webdriver.Edge() driver.get(r"D:\WORK\ww\web自动化_day01_课件笔记资料代码\web自动化_day01_课件笔记资料代码\02_其他资料…

调试支付分回调下载平台证书

之前的原生代码放到webman里面&#xff0c;死活跑不通 没办法&#xff0c;只能用esayWeChat6.7 &#xff08;自行下载&#xff09; 它里面配置要用到平台证书 平台证书又要用到 composer require wechatpay/wechatpay 但是请求接口之前&#xff0c;你先要用到一个临时的平台…

配置atuin记录

https://atuin.sh/ 运行 curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh报错 $ curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh curl: (77) error setting certificate verify locations:CAfile: /etc/ssl/certs/ca-certificates.crtCAp…

同时安装JDK8和JDK17+环境变量默认无法修改

一、问题描述 当在windows系统中&#xff0c;同时安装JDK8和JDK17&#xff0c;环境变量默认就为jdk17&#xff0c;且从jdk17切换为jdk8后不生效&#xff0c;使用"java -version"命令查看后还是17版本。 解决方法 首先&#xff0c;产生的原因是&#xff0c;在安装…

2024最新源代码加密软件丨五款企业级软件评测

程序源代码作为企业的核心成果&#xff0c;一旦泄密将产生重大的损失&#xff0c;加密源代码至关重要。 可以防止他人未经授权使用、复制或修改源代码&#xff0c;保护开发者的劳动成果。 可以防止源代码被黑客或竞争对手获取和分析&#xff0c;减少漏洞被发现和利用的风险。…

JAVA极简图书管理系统,初识springboot后端项目

前提条件&#xff1a; 具备基础的springboot 知识 Java基础 废话不多说&#xff01; 创建项目 配置所需环境 将application.properties>application.yml 配置以下环境 数据库连接MySQL 自己创建的数据库名称为book_test server:port: 8080 spring:datasource:url:…

ShareSDK HarmonyOS NEXT集成指南

集成前准备 注册账号 使用MobSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;详情可以点击查看注册流程 ShareSDK流程图 集成配置 添加依赖 在Terminal窗口中&#xff0c;执行如下命令进行安装 ohpm …

【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)

文章目录 配置镜像源下载Pytorch验证使用Pytorch进行数字识别 配置镜像源 Anaconda下载完毕之后&#xff0c;有两种方式下载pytorch&#xff0c;一种是用页面可视化的方式去下载&#xff0c;另一种方式就是直接用命令行工具去下载。 但是由于默认的Anaconda走的是外网&#x…