▊ 运算符
比较基础的内容了,这里只给出一些值得注意的地方,不做系统阐释
☀ 注意:
- 除法运算符
/
就是除法。和Python类似:3 / 2
返回1.5;而不是Java那样的地板除:3 / 2
返回1 - 只要是计算机的浮点运算,必然出现的精度问题:0.1 + 0.2返回0.30000000000000004 != 0.3
- 一道陷阱题,
a = 10
;问b = a++ + ++a
,b的值为? 是22。第二个a在自增之前,已经变成了11 - 与Python不同,
12 == ‘12’
返回的竟然是true! - JS还有全等于的概念,
12 === ‘12’
返回的为false —— 全等于还要求不仅值相等,数据类型也要相同 ==
与!=
是一对。===
与!==
是一对,后者称为不全等于- 字符串类型的数字与数字型的数字比较时,隐式转换为数字型的比较:
'3' > 2
- 其实,字符串在连接运算(+)时必然使另一个元素隐式转化为字符串,在与数字
-
,*
,/
时是隐式转化为数字型的 - 关于逻辑运算符,与Java类似:有
&&
与&
、||
与|
的微妙区别(逻辑中断) 3 && 5
返回5,0 && 5
返回0。这其实正是逻辑中断的逻辑:当第一个表达式为假时,与运算不再继续3 || 5
返回3,0 || 5
返回5。这其实正是逻辑中断的逻辑:当第一个表达式为真时,或运算不再继续- 逻辑运算符也有优先级:
&&
优先级高于||
。陷阱题:true || true && false
答案为 true
▊ 流程控制
在形式上,与同为脚本语言的Python反而不像,与C或者Java一样
❶ if - else if - else
❷ switch - case - default
注意:
- switch在匹配时是全等(===)匹配,要求数据类型也严格一致
- switch平时比较少用,因此这里给出个demo加深印象
var fruit = prompt('请输入想要购买的水果:');
switch (fruit) {
case 'apple':
alert(12);
break;
case 'orange':
alert(48);
break;
default:
alert('none');
}
▊ 循环
for和while,真的,没什么可说的了;
对了,JS有增强for,也就是for…in…的
当你可以用十种语言输出"Hello world
"时,不妨也用十种语言输出九九乘法表吧!
这里JS的在控制台输出的时候有点奇怪,它只能println不能print,因此它的换行输出,总是依赖于总字符串的拼接:
var res = ''; // 依赖res这个"总字符串"的拼接
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
res += (j + '×' + i + '=' + i * j + '\t');
}
res += '\n';
}
console.log(res);
另外,关于for...in...
循环,与其他语言的用法比较不同,一定万分注意:
for...in...
遍历对象时,我们就该发现,遍历出的是"键(key)“而不是"值(value)”
对于数组,可以认为键就是下标,值是数组元素 —— 因此for each in arr
打印出的each其实下标而非元素
坑不仅如此。下标还是字符串类型。
更坑的是,字符串类型的下标也能正常索引:arr['2']
var arr = [2, 3, 5, 8];
for(var each in arr) {
console.log(each);
}
// 打印的实际上是 '0' '1' '2' '3',即"字符串形式的下标"
// 想要遍历元素,应该这样:
for(var each in arr) {
console.log(arr[each]);
}
// 如此,for-in-循环对比普通for循环根本没有优势,遍历数组十分不建议使用for-in-
▊ 数组
创建数组 ↓
var arr = new Array(); // 创建空数组(对象方式)
var arr = []; // 创建空数组(字面量方式)
初始化数组 ↓
var arr = [1, 1, 2, 3, 'Loli', true];
// 数组元素没有数据类型限制,与Python中的数组——列表极为相似
获取数组元素 ↓
console.log(arr[2]);
console.log(arr[233]); // 如果越界了,竟然不会越界报错!而是打印出了undefined
数组长度 ↓
console.log(arr.length);
不知道该干什么,写个冒泡排序吧( 其实是忘记了,强化记忆一下>_< ):
var arr = [3, 5, 1, 0, 9, 2];
for (var i = 0; i < arr.length - 1; i++) { // 冒泡的趟数:长度为6的数组只需要冒泡5趟,因为轮都能保证最后一个为最大值,第一个就自动被排好了
for (var j = 0; j < arr.length - i - 1; j++) { // 每趟少排一次(最后一个元素已经确定)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// arr = [0, 1, 2, 3, 5, 9]
☀ Loli & JS
♫ Saikou