学习目标:
对JavaScript有一个大致的了解。
学习内容:
-
它有原始数据类型和对象类型
1)数据类型
javascript有七种基元类型
Number
Infinity
String
Boolean
符号
Undefined
Null五种对象类型
Function
Array
Date
RegExp
Error严格来说,函数不是JavaScript中的特殊数据结构,只是可以调用特殊类型的对象。
- 变量
声明变量的方法:let、const、var。
let声明块级变量。
const声明永远不会更改的变量,这个变量不能重新赋值。如果声明的是对象,它不会阻止变量值的突变。
const obj = {};
obj.a = 1; // no error
console.log(obj); // { a: 1 }
var声明的变量具有令人惊讶的行为(它们不是块范围的),JavaScript 代码中不鼓励使用它。它是全局变量,任何地方想要调用它都可以。但是声明不赋值只会为undefined。 -
运算符
数字运算符:+、-、*、/、%、=、^、+=、-=、++、--。
+运算符还可以执行字符串连接。
“3”+4+5最后结果是字符串
3+4+“5”最后结果是75(3+4=7,+字符5)比较运算符:<、>、<=、>=、==、===、!=、!==。
其中==只比较值,===比较值和类型。
123 == "123"; // true
1 == true; // true
123 === "123"; // false
1 === true; // false逻辑运算符:&&、||。
&&:只要第一个值为假,后面不用判断全为假。
||:只要第一个为真,后面不用判断全为真。
这意味着他们是否会执行第二个操作数取决于第一个操作数。
&&:访问空对象属性之前检查其属性
||:对于缓存值(当假值无效时) - 语法(简略)
JavaScript 语法与 C 家族非常相似。
注释://、/**/、#。
分号是可选的。也就是说可以在每个代码后面不写分号也可以。 - 控制结构
JavaScript 具有与 C 系列中其他语言类似的一组控制结构。
1)if……else if……else……
2)while(){}
3)for(let i;i<number;i++){}
4)for……of……(遍历对象)
5)for……in……(遍历变量)
6)switch……case……break;default……
7)错误使用try捕获语句
try{}catch(e){console.error(e);}
8)throw语句引发错误 -
对象
JavaScript 对象可以被认为是键值对的集合。
类似于:
Python中的字典。
Perl 和 Ruby 中的哈希值。
C 和 C++ 中的哈希表。
Java中的HashMaps。
PHP 中的关联数组。JavaScript 对象是哈希值。与静态类型语言中的对象不同,JavaScript 中的对象没有固定的形状——可以随时添加、删除、重新排序、更改或动态查询属性。对象键始终是字符串或符号——即使是数组索引(规范的整数)实际上也是底层的字符串。
创建一个对象:
const obj = {
name: "Carrot",
for: "Max",
details: {
color: "orange",
size: 12,
},
};
使用点语法或方括号【】访问对象属性。使用点表示法时,键必须是有效的标识符。另一方面,括号允许使用动态键值为对象编制索引。
obj.name = "Simon";
const name = obj.name;obj["name"] = "Simon";
const name = obj["name"];两个单独创建的对象永远不会相等,它们是不同的引用。
-
数组
1)JavaScript 中的数组实际上是一种特殊类型的对象。它有一个神奇的属性。length始终比数组中的最高索引多 1。
const a = ["dog", "cat", "hen"];
a.length; // 3
2)length它会自动更新。
const a = ["dog", "cat", "hen"];
a[100] = "fox";
console.log(a.length); // 101
console.log(a); // ['dog', 'cat', 'hen', <97 empty items>, 'fox']
3)查询不存在的数组索引,则会得到undefined。
4)数组可以具有任何元素,并且可以任意增长或收缩。
5)数组可以for……of……和for循环进行迭代。
6)map() 会为每个数组元素应用回调,并返回一个新数组:
const babies = ["dog", "cat", "hen"].map((name) => `baby ${name}`);
// babies = ['baby dog', 'baby cat', 'baby hen']
还有其他有关数组的方法,感兴趣的可以去搜索学习。 -
功能
1)函数是理解JavaScript的核心组件。最基本的函数声明如下所示:
function add(x) {
const total = x + x;
return total;
}
2)函数未使用 return 语句(或没有值的空返回),则返回undefined。
3)传递的参数多于预期,则该函数将忽略额外的参数
add(2, 3, 4); // 5
// added the first two; 4 was ignored
4)参数语法允许将调用者传递的所有额外参数收集到一个数组中
function avg(...args) {
let sum = 0;
for (const item of args) {
sum += item;
}
return sum / args.length;
}
avg(2, 3, 4, 5);
5)方便地打包和解包对象。
function area({ width, height }) {
return width * height;
}
console.log(area({ width: 2, height: 3 }));
6)箭头函数
const avg = (...args) => {
let sum = 0;
for (const item of args) {
sum += item;
}
return sum / args.length;
};
7)递归函数
8)函数是一等对象,意味着函数时可以分配给变量,作为参数传递给其他函数,
9)内部函数:就是函数里面还有函数。
function Func() {
const a = 1;
function Func1() {
const b = 4; // parentFunc can't use this
return a + b;
}
return Func1(); // 5
}
可以减少全局范围内的函数数量。
抵消了全局变量的诱惑。
编写复杂代码时,通常很容易使用全局变量在多个函数之间共享值,这会导致代码难以维护。
嵌套函数可以共享其父级中的变量,可以使用该机制将函数耦合在一起,而不会污染全局命名空间。 -
功能
JavaScript 提供的类语法与 Java 等语言非常相似。
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
return `Hello, I'm ${this.name}!`;
}
}
const p = new Person("Maria");
console.log(p.sayHello());
JavaScript 类只是必须使用new运算符实例化的函数。 -
异步编程
JavaScript本质上是单线程的。没有平行仅并发。异步编程由事件循环提供支持,该事件循环允许一组任务排队并轮询完成。
同步代码优先执行,异步代码等同步代码执行完毕再去执行。
JavaScript 中编写异步代码有三种惯用方法:
基于回调(如setTimeout())。
基于承诺。
async/await,这是承诺的语法。 -
模块
模块通常是一个文件,由其文件路径或 URL 标识。您可以使用导入和导出语句在模块之间交换数据
import { foo } from "./foo.js";
const b = 2;
export const a = 1;
不同的运行时可能使用不同的模块系统。例如,Node.js使用包管理器npm。
上面就是介绍了一下,以下的部分可以自己进行探索:继承和原型链、闭 包、正则表达式、迭 代、一些API等。