let a=100;
let a,b,c;
let a=521,b='I Love You',c=[5,2,0];
1、变量不能重复声明
let 不像 var 那样,重复声明会被覆盖
let 如果同时声明了两个重复的变量名,则会直接报错
例如
let b=521;
let b=125;
console.log('let'+b);
2、块级作用域
{
let a=1;
}
console.log(a);
3、不存在变量提升
4、不影响作用域链
const 关键字用于声明常量
const NAME='兰巧儿';
必须要有初始值
一般常量名使用大写
常量的值不允许修改
const 也属于块及作用域
对于数组和对象的元素修改,不算做对常量的修改,不会报错
例如我声明了一个数组,在向其中添加元素,并不会报错
const ARRAYS=[1,2,3];
ARRAYS.push(4);
console.log(ARRAYS)
因为本质上数组的内存地址并没有修改
如果直接将数组的值改变,则会报错,类似于这样操作
const ARRAYS=[1,2,3];
ARRAYS=5;
const NUMBERS=[5,2,1];
let [a,b,c]=NUMBERS;
console.log(a)
console.log(b)
console.log(c)
const Lan={
name:"兰巧儿",
age:17,
show:function () {
console.log("不务正业的男高")
}
};
let {name,age,show}=Lan;
console.log(name)
console.log(age)
show();
let str=`兰巧儿`
1、可以直接进行换行
let str=`
- 1
- 2
- 3
- 4
`
2、拼接字符串 ${}
${}
来直接进行拼接 let str2=`你好`
let str3=`${str2}世界`
console.log(str3)
let name="兰巧儿"
let show=function () {
console.log("大家好")
}
const SHCOOL={
name,
show
}
console.log(SHCOOL)
const SHCOOL={
name:"云朵",
show(){
console.log("大家好")
}
}
=>
来定义函数let fn = () =>{
console.log("你好");
}
this 是静态的
function fn1() {
console.log(this.name)
}
let fnJ2 = () => {
console.log(this.name)
}
window.name="兰巧儿"
let shcool={
name:"巧克力"
}
fn1();
fnJ2();
fn1.call(shcool)
fnJ2.call(shcool)
不能作为构造实例化对象
不能使用 arguments 变量
1、当形参有且只有一个时
let fn = n =>{
return n+n
}
console.log(fn(3));
2、当代码中只有一条语句时
let fn = n => n*n
console.log(fn(3));
this
上下文,而是继承父级作用域中的 this
值。这使得箭头函数在处理上下文问题时更加方便。{}
和 return
语句来简化代码。this
绑定问题:箭头函数没有自己的 this
值,所以可以避免在使用普通函数时经常出现的 this
绑定问题。this
。arguments
对象的函数:箭头函数没有自己的 arguments
对象,它继承了父级作用域中的 arguments
。如果你需要在函数内部访问函数的参数列表,那么箭头函数将不适用。this
的函数:箭头函数继承父级作用域中的 this
值,无法通过 call()
、apply()
或 bind()
等方法来改变绑定的 this
值。如果你需要在函数中使用动态绑定的 this
,则应该使用普通函数。prototype
对象,因此不能用作构造函数或原型方法。如果你需要在对象的原型方法中使用函数,并且希望通过 new
关键字实例化对象,则需要使用普通函数。yield
关键字的生成器函数:箭头函数不能作为生成器函数使用,因为它们没有内部的迭代状态和 yield
关键字。如果你需要定义生成器函数,那么只能使用普通函数。 function fn(a,b,c=10) {
console.log(a+b+c)
}
fn(1,2)
function fn({host='127.0.0.1',username,password,port}) {
console.log(host)
console.log(username)
console.log(password)
console.log(port)
}
let connect={
username:'root',
password:'root',
port:'3306'
}
fn(connect);
function fn(...abc) {
console.log(abc)
}
fn(1,2,3,4,5,6,7,8)
...
...args
、...abc
、...ufo
Symbol 的创建主要有两种方式
1、第一种:使用 Symbol()
函数
Symbol()
函数来创建一个新的 Symbol 值const mySymbol = Symbol("描述");
2、第二种:使用 Symbol.for()
函数
Symbol.for()
函数可以创建或检索具有相同键(key)的全局 Symbolconst mySymbol = Symbol.for('myKey');
Symbol()
创建与 Symbol.for()
的区别使用 Symbol()
创建 Symbol:
Symbol()
函数创建的每个 Symbol 都是唯一的,即使描述参数相同。Symbol()
创建的 Symbol 总是在本地作用域中有效,不会自动注册为全局 Symbol。Symbol()
调用创建的 Symbol 值是不相等的。使用 Symbol.for()
创建 Symbol:
Symbol.for()
函数创建的 Symbol 可以在全局共享符号注册表中查找或创建具有相同键的 Symbol。Symbol.for()
时,如果已经存在具有相同键的 Symbol,则返回已存在的 Symbol,否则创建一个新的 Symbol 并注册到全局符号注册表中。总结:
- 使用
Symbol()
创建的 Symbol 是本地作用域的唯一值。- 使用
Symbol.for()
创建的 Symbol 可以在全局共享符号注册表中查找或创建。Symbol()
创建的 Symbol 是独立的,而Symbol.for()
创建的 Symbol 在全局共享注册表中被共享。Symbol.for()
更适合需要全局共享和识别的场景,而Symbol()
则更适合局部使用的场景。
假如现在存在一个班级对象,用于纪录学生的成绩,假设有两个同学名字相同,但成绩不同
let grade={
'李四':{css:100,js:89},
'李四':{css:20,js:35}
}
console.log(grade)
let user1={
name:'李四',
key:Symbol()
}
let user2={
name:'李四',
key:Symbol()
}
let grade={
[user1.key]:{css:100,js:89},
[user2.key]:{css:20,js:35}
}
console.log(grade)
[user.key]
必须要添加中括号,否则会将 Symbol 当作字符串处理...
)语法,将一个对象的属性“展开”到另一个对象中Object.assign()
或写一些冗长的代码来手动合并它们let object1={
x:1,
y:2
}
let object2={
z:3
}
let object3={...object1,...object2}
console.log(object3)
obj1
和 obj2
的属性“展开”到新对象中,并创建了一个包含三个属性的新对象 let object1={a:1,b:2,c:3}
let {a,...obj2}=object1
console.log(a)
console.log(obj2)
a
属性并将其赋值给变量 a
rest
对象中map()
方法map()
方法用于创建一个新数组,数组中的元素是原始数组经过指定函数处理后的结果map()
方法接受一个回调函数作为参数,该回调函数会针对原数组的每个元素执行,并将返回的结果组成一个新的数组map()
的基本语法const newArray = array.map(function(currentValue, index, array) {
// 回调函数逻辑,返回经过处理的元素
});
function
:回调函数,用于处理每个数组元素的逻辑。回调函数可以接受三个参数:
currentValue
:当前正在处理的元素。index
(可选):当前元素的索引。array
(可选):原始数组对象。newArray
:由 map()
方法返回的新数组,其中包含原始数组经过处理后的结果array.reduce(function(callback[, initialValue]){
})
回调函数(callback):
初始值(initialValue):
示例
var nums=[1,2,3,4,5,6,7,8,9]
var sum=nums.reduce((a,b) => a + b);
console.log(sum);
这里的第一个参数 a
,如果首次执行,则代表数组内的第一个数
往后的每次执行,都代表之前数组元素相加的总和
参数 b
表示当前遍历到的数组元素,也就是数组 nums
中的每个元素的值
() 方法的核心,用于对数组进行累积操作。
初始值(initialValue):
示例
var nums=[1,2,3,4,5,6,7,8,9]
var sum=nums.reduce((a,b) => a + b);
console.log(sum);
a
,如果首次执行,则代表数组内的第一个数b
表示当前遍历到的数组元素,也就是数组 nums
中的每个元素的值