JavaScript学习笔记(6.0)

JavaScript类

使用关键字class创建类。

始终添加constructor()方法

class ClassName{
    constructor(){...}
}
calss Car{
    constructor(name,year){
    this.name=name;
    this.year=year;
}
}

创建了一个名为Car的类,并且拥有两个初始属性name和year。

JavaScript类不是对象,只是JavaScript对象的模板。

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript 类</h1>

<p>如何使用 JavaScript 类。</p>

<p id="demo"></p>

<script>
class Car {
  constructor(name, year) {
    this.name = name;
    this.year = year;
  }
}

const myCar = new Car("Ford", 2014);
document.getElementById("demo").innerHTML =
myCar.name + " " + myCar.year;
</script>

</body>
</html>

使用Car类创建了一个个car对象,在创建新对象时会自动调用constructor方法。

constructor方法是一种特殊的方法:

它必须有确切名称的“构造函数”

创建新对象时自动执行

用于初始化对象属性

如果未定义构造函数方法,JavaScript会添加空的构造函数方法。

class Car {
  constructor(name, year) {
    this.name = name;
    this.year = year;
  }
  age() {
    let date = new Date();
    return date.getFullYear() - this.year;
  }
}

let myCar = new Car("Ford", 2014);
document.getElementById("demo").innerHTML = "My car is " + myCar.age() + " years old.";

JavaScript JSON

JSON是存储和传输数据的格式。

JSON经常在数据从服务器发送到网页时使用。

JSON(JavaScript Object Notation)

JSON是轻量级的数据交换格式

JSON独立于语言*

JSON是自描述的且易于理解的

*JSON的语法是来自JavaScript对象符号的语法,但JSON格式是存文本。读取和生成JSON数据的代码可以在任何编程语言编写的。

用JSON语法定义包含三条员工记录的数组(对象)的对象:
 

{
"employees":[
    {"firstName":"Bill", "lastName":"Gates"}, 
    {"firstName":"Steve", "lastName":"Jobs"},
    {"firstName":"Alan", "lastName":"Turing"}
]
}

JSON格式评估为JavaScript对象

JSON格式在语法上与创建JavaScript对象代码相同。所以JavaScript可以很容易将JSON数据转换成本地的JavaScript对象。

JSON语法规则:

(1)数据是名称/值对

(2)数据由逗号分割

(3)花括号保存对象

(4)方括号保存数组

JSON名称需要双引号。JavaScript名称不需要

"firstName":"Bill"

将JSON文本转换为JavaScript对象

JSON的同化成那个用法是从web服务器读取数据,然后在网页中显示数据。

下面使用字符串作为输入

首先,创建包含JSON语法的JavaScript字符串:

var text = '{ "employees" : [' +
'{ "firstName":"Bill" , "lastName":"Gates" },' +
'{ "firstName":"Steve" , "lastName":"Jobs" },' +
'{ "firstName":"Alan" , "lastName":"Turing" } ]}';

然后使用JavaScript的内建函数JSON.parse()来把这个字符串转换为JavaScript对象:
 

var obj = JSON.parse(text);
<!DOCTYPE html>
<html>
<body>

<h1>用 JSON 字符串创建对象</h1>

<p id="demo"></p>

<script>
var text = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"Steve","lastName":"Jobs" },' +
'{"firstName":"Elon","lastName":"Musk" }]}';

obj = JSON.parse(text);
document.getElementById("demo").innerHTML =
obj.employees[1].firstName + " " + obj.employees[1].lastName;
</script>

</body>
</html>

JavaScript调试

在没有调试器的情况下写JavaScript是有难度的。

我们通常通过F12键启动浏览器的调试器,然后在调试器菜单中选择“控制台(console)”

console.log()方法

<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<script>
a = 5;
b = 6;
c = a + b;
console.log(c);
</script>

</body>
</html>

设置断点

在调试窗口中,您可以在JavaScript代码中设置断点。

在每个断点中,JavaScript将停止执行,以使您能够检查JavaScript的值。

在检查值之后。您可以恢复代码执行。

debugger关键词

debugger关键词会停止JavaScript的执行,并调用调试函数。

这与在调试器中设置断点的功能是一样的。

如果调试器不可用,debugger语句没有效果。

如果调试器已打开,此代码会在第三行之前停止运行。

<!--
 * @Author: RealRoad1083425287@qq.com
 * @Date: 2023-03-12 16:33:12
 * @LastEditors: Mei
 * @LastEditTime: 2023-03-12 16:39:28
 * @FilePath: \vscode\测试断点.html
 * @Description: 
 * 
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body>
    <p id="test"></p>
    <script>
        var x=15*3
        debugger
        document.getElementById("test").innerHTML=x;
    </script>
</body>
</html>

 JavaScript最佳实践

避免使用全局变量。

它包括所有的数据类型、对象和函数。

全局变量和函数可被其他脚本覆盖。

JavaScript嵌套函数

所有函数都有权访问全局作用域。

事实上,在JavaScript中,所有函数都有权访问他们“上面”的作用域。

JavaScript支持嵌套函数。嵌套函数可以访问其上的作用域。

内部函数plus()可以访问复函数中的counter计数器变量:

<!--
 * @Author: RealRoad1083425287@qq.com
 * @Date: 2023-03-12 16:33:12
 * @LastEditors: Mei
 * @LastEditTime: 2023-03-12 16:54:18
 * @FilePath: \vscode\测试断点.html
 * @Description: 
 * 
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body>
    <p id="test"></p>
    <script>
        // var x=15*3
        // debugger
        // document.getElementById("test").innerHTML=x;
        function add() {
        var counter = 0;
        function plus() {counter += 1;}
        plus();     
        return counter; 
    }
        document.getElementById("test").innerHTML=add();
    </script>
</body>
</html>

这样可以解决计数器困境,如果我们能够从外面访问plus()函数。

我们还需要找到只执行一次counter=0的方法。

我们需要闭包(closure)。

JavaScript闭包

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript 闭包</h1>

<p>使用局部变量计数。</p>

<button type="button" onclick="myFunction()">计数!</button>

<p id="demo">0</p>

<script>
var add = (function () {
  var counter = 0;
  return function () {counter += 1; return counter;}
})();

function myFunction(){
  document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>

变量add的赋值是自调用函数的返回值。这个自调用函数只运行一次。它设置计数器为零,并返回函数表达式。

这样add称为了函数。最精彩的部分是他能够访问父作用域中的计数器。这样被称为JavaScript闭包。它使函数拥有“私有变量”变成可能。计数器被这个匿名函数的作用域保护,并且只能使用add函数来修改。闭包指的是有权访问父作用域的函数,即使在父函数关闭之后。

转回来

始终声明局部变量

所有在函数中使用的变量应该被声明为局部变量。

局部变量必须通过var关键字来声明,否则他们将变成全局变量。

严格模式下不允许使用未声明的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值