2024年Web前端最全ES6 入门—ES6 解构赋值,2024年最新小公司程序员面试

HTTP

  • HTTP 报文结构是怎样的?

  • HTTP有哪些请求方法?

  • GET 和 POST 有什么区别?

  • 如何理解 URI?

  • 如何理解 HTTP 状态码?

  • 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?

  • 对 Accept 系列字段了解多少?

  • 对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

console.log(“e 与 f 正常解构赋值,匹配结果:e = 1,f = 2。”);

let [e = 3, f = e] = [1, 2];

console.log(“e 的值为” + e);

console.log(“f 的值为” + f);

在终端使用 node 命令运行:

请添加图片描述

二、对象的解构赋值

============================================================================

解构不仅可以用于数组,还可以用于对象。对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

let { foo, bar } = { foo: ‘aaa’, bar: ‘bbb’ };

// foo = ‘aaa’

// bar = ‘bbb’

let { baz : foo } = { baz : ‘ddd’ };

// foo = ‘ddd’

let person = { name: ‘zhangsan’, age: 20, sex: ‘男’};

let {name, age, sex} = person;

// name = ‘zhangsan’

// age = 20

// sex = ‘男’

示例代码:

步骤一:新建一个名为 test6.js 的文件,在其中输入以下代码:

console.log(“示例一:”);

console.log(

“等号左边的两个变量的次序,与等号右边两个同名属性的次序不一致,但是对取值完全没有影响。”

);

let { foo, bar } = { foo: “aaa”, bar: “bbb” };

console.log(“foo 的值为” + foo);

console.log(“bar 的值为” + bar);

console.log(“示例二:”);

let { baz: ccc } = { baz: “ddd” };

console.log(“ccc 的值为” + ccc);

console.log(“示例三:”);

let person = { name: “zhangsan”, age: 20, sex: “男” };

let { name, age, sex } = person;

console.log(“name :” + name);

console.log(“age :” + age);

console.log(“sex :” + sex);

在终端使用 node 命令运行:

请添加图片描述

下面这个例子的变量没有对应的同名属性,导致取不到值,最后等于 undefined。

var { baz } = { foo: “aaa”, bar: “bbb” };

// baz = undefined

新建 index.html 文件,示例代码:

显示效果:

请添加图片描述

如果变量名与属性名不一致,必须写成下面这样。

var { foo: baz } = { foo: ‘aaa’, bar: ‘bbb’ };

// baz = “aaa”

let obj = { first: ‘hello’, last: ‘world’ };

let { first: f, last: l } = obj;

// f = ‘hello’

// l = ‘world’

三、可嵌套可忽略

===========================================================================

和数组一样,解构也可以用于嵌套结构的对象。

let obj = {p: [‘hello’, {y: ‘world’}] };

let {p: [x, { y }] } = obj;

// x = ‘hello’

// y = ‘world’

let obj = {p: [‘hello’, {y: ‘world’}] };

let {p: [x, { }] } = obj;

// x = ‘hello’

示例代码一:

新建一个名为 index1.html 的文件,在其中输入以下代码:

显示效果:

请添加图片描述

示例代码二:

新建一个名为 index2.html 的文件,在其中输入以下代码:

显示效果:

请添加图片描述

下面是嵌套赋值的例子。

let obj = {};

let arr = [];

({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true });

//obj = {prop:123}

//arr = [true]

四、解构默认值

==========================================================================

对象的解构也可以指定默认值。

let {a = 10, b = 5} = {a: 3};

// a = 3; b = 5;

let {c: aa = 10, d: bb = 5} = {c: 3};

// aa = 3; bb = 5;

var { message: msg = ‘Something went wrong’ } = {};

//msg = “Something went wrong”

示例代码:

步骤一:新建一个名为 test7.js 的文件,在其中输入以下代码:

console.log(“示例一:”);

let { a = 10, b = 5 } = { a: 3 };

console.log(“a 的值为” + a);

console.log(“b 的值为” + b);

console.log(“示例二:”);

let { c: aa = 10, d: bb = 5 } = { c: 3 };

console.log(“aa 的值为” + aa);

console.log(“bb 的值为” + bb);

console.log(“示例三:”);

var { message: msg = “Something went wrong” } = {};

console.log(“msg 的值为” + msg);

步骤二:在终端使用 node 命令运行:

请添加图片描述

五、不完全解构

==========================================================================

let obj = {p: [{y: ‘world’}] };

let {p: [{ y }, x ] } = obj;

// x = undefined

// y = ‘world’

示例代码:

步骤一:新建一个名为 test8.js 的文件,在其中输入以下代码:

let obj = { p: [{ y: “world” }] };

let {

p: [{ y }, x],

} = obj;

console.log(“x =” + x);

console.log(“y =” + y);

步骤二:在终端使用 node 命令运行:

请添加图片描述

六、剩余运算符

==========================================================================

let {a, b, …rest} = {a: 10, b: 20, c: 30, d: 40};

// a = 10

// b = 20

// rest = {c: 30, d: 40}

示例代码:

步骤一:新建一个名为 test9.js 的文件,在其中输入以下代码:

let { a, b, …rest } = { a: 10, b: 20, c: 30, d: 40 };

console.log(“a =” + a);

console.log(“b =” + b);

console.log(“rest =” + rest.c);

console.log(“rest =” + rest.d);

步骤二:在终端使用 node 命令运行:

请添加图片描述

七、注意事项

=========================================================================

如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法

var x;

{x} = {x: 1};

// SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将 {x} 理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

// 正确的写法

({x} = {x: 1});

上面代码将整个解构赋值语句,放在一个圆括号里面,就可以正确执行。关于圆括号与解构赋值的关系,如下。

解构赋值允许,等号左边的模式之中,不放置任何变量名。因此,可以写出非常古怪的赋值表达式。

({} = [true, false]);

({} = ‘abc’);

({} = []);

八、字符串的解构赋值

=============================================================================

在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。

字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。新建文件 index3.html ,示例代码:

显示效果:

请添加图片描述

类似数组的对象都有一个 length 属性,因此还可以对这个属性解构赋值。新建文件 index4.html ,示例代码:

显示效果:

请添加图片描述

九、圆括号问题

==========================================================================

解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道。

由此带来的问题是,如果模式中出现圆括号怎么处理。ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。但是,这条规则实际上不那么容易辨别,处理起来相当麻烦。因此,建议只要有可能,就不要在模式中放置圆括号。

不得使用圆括号的情况

变量声明语句中,不能带有圆括号。

var [(a)] = [1];

var {x: ©} = {};

var ({x: c}) = {};

var {(x: c)} = {};

var {(x): c} = {};

var { o: ({ p: p }) } = { o: { p: 2 } };

上面三个语句都会报错,因为它们都是变量声明语句,模式不能使用圆括号。

函数参数中,模式不能带有圆括号。

function f([(z)]) { return z; }

函数参数也属于变量声明,因此不能带有圆括号,否则报错。

赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。

({ p: a }) = { p: 42 };

([a]) = [5];

// 上面代码将整个模式放在圆括号之中,导致报错。

[({ p: a }), { x: c }] = [{}, {}];

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

var [(a)] = [1];

var {x: ©} = {};

var ({x: c}) = {};

var {(x: c)} = {};

var {(x): c} = {};

var { o: ({ p: p }) } = { o: { p: 2 } };

上面三个语句都会报错,因为它们都是变量声明语句,模式不能使用圆括号。

函数参数中,模式不能带有圆括号。

function f([(z)]) { return z; }

函数参数也属于变量声明,因此不能带有圆括号,否则报错。

赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中。

({ p: a }) = { p: 42 };

([a]) = [5];

// 上面代码将整个模式放在圆括号之中,导致报错。

[({ p: a }), { x: c }] = [{}, {}];

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-6HiUk7i2-1715367236843)]

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值