基础运算Basics
变量Variables
简答题
执行下面的代码时,程序会崩溃么?
1 2 console.log(a)var a = 1;
A
会
B
不会
解释
你会看到 undefined,详情参见 变量吊起 hoisting
逻辑运算Logics
简单题
执行下面的代码,你会看到什么
1 console.log(1 === 1.0);
答案
true
js 中 整数和小数 都是 number 类型
分析题
下面的代码的 第 2 行 试图在使用 || 运算规则,达到默认值的效果
1 2 3 4 5 6 function increase(value, delta) { delta = delta || 1; return value + delta;}console.log(increase(3, 2));console.log(increase(3, null));
请分析
1.
程序执行后,你会看到什么
2.
这种设计有一个设计缺陷,请你找出来
答案
1.
会看到
5 4
2.
如果调用方就想 increase by 0
当前的代码,会让 delta 的 0 变为 1
从而得到不想要的结果
1 <console.log(increase(3, 0));4
条件 与 循环 语句
分析题
1 2 3 4 do { let value = Math.random();} while (value < 0.5);console.log(value);
1.
当前代码,运行时 会报错,为什么
2.
如何改进
答案
1.
因为 let 限制了 value 的作用域
2.
将 let 改为 var,或者 将 let 声明提前到 do 前面
数组Array
内存分析题
运行下面的代码,你会看到什么
1.
1 2 3 4 5 const a1 = [];const a2 = a1;a2.push(1);console.log(a1);console.log(a2);
[ 1 ] [ 1 ]
2.
1 2 3 4 5 const a1 = [6, 7, 3, 8, 4];const a2 = [0, ...a1];a2.push(0);console.log(a1);console.log(a2);
[ 6, 7, 3, 8, 4 ] [ 0, 6, 7, 3, 8, 4, 0 ]
3.
1 2 3 4 5 const a1 = [[6, 7, 3], 8, 4];const a2 = [0, ...a1];a2[1][0] = 2;console.log(a1);console.log(a2);
[ [ 2, 7, 3 ], 8, 4 ] [ 0, [ 2, 7, 3 ], 8, 4 ]
对象Object
内存分析题
运行下面的代码,你会看到什么
1.
1 2 3 4 5 const obj1 = {};const obj2 = obj1;obj2.x = 1;console.log(obj1);console.log(obj2);
{ x: 1 } { x: 1 }
2.
1 2 3 4 5 const obj1 = { x: 1, y: 2 };const obj2 = { z: 3, ...obj1 };obj2.x = 7;console.log(obj1);console.log(obj2);
{ x: 1, y: 2 } { x: 7, y: 2, z: 3 }
3.
1 2 3 4 5 6 7 8 9 10 11 const obj1 = { center: { x: 1, y: 2 }, radius: 3};const obj2 = { color: 'red', ...obj1 };obj2.center.x = 7;console.log(obj1);console.log(obj2);
{ center: { x: 7, y: 2 }, radius: 3 } { color: 'red', center: { x: 7, y: 2 }, radius: 3 }
函数Functions
分析题
下面代码运行的结果是什么
1 2 3 4 5 6 7 8 9 call();function call() { console.log('call 1');}call();function call() { console.log('call 2');}call();
答案
call 2 call 2 call 2
分析题
下面代码在预扫描过后,会在执行前给哪些变量开数据格
1 2 3 4 v1 = 1;var v2 = 2;let v3 = 3;const v4 = 4;
答案
v2 = undefined
阅读题
阅读下面的函数,你觉得你可以怎么调这个函数
1 2 3 4 5 6 7 8 9 function incr(value, delta) { if (value === undefined) { return; } if (delta === undefined) { delta = 1; } return value + delta;}
答案
1 2 =3 4 5 =// 传 2 个参数 可以指明更改量incr(10, 2)2 // 传 1 个参数 相当于是默认 + 1incr(10)1
综合练习
使用 js 完成下面的程序中的 1 - 2 个
目前,你应该只能在一个文件中完成所有的功能,还不能拆分多个文件
需要使用类设计时,暂时先用 object 语法将就
暂时先按 面向过程的思维写
猜数字
Q10
五子棋
Q56
1024
Q57
黑白棋
Q58