【JavaScript】Day2——运算符、流程控制、循环、数组

运算符

比较基础的内容了,这里只给出一些值得注意的地方,不做系统阐释

注意

  1. 除法运算符/就是除法。和Python类似:3 / 2返回1.5;而不是Java那样的地板除:3 / 2返回1
  2. 只要是计算机浮点运算,必然出现的精度问题0.1 + 0.2返回0.30000000000000004 != 0.3
  3. 一道陷阱题,a = 10;问 b = a++ + ++a,b的值为? 是22。第二个a在自增之前,已经变成了11
  4. 与Python不同,12 == ‘12’返回的竟然是true!
  5. JS还有全等于的概念,12 === ‘12’返回的为false —— 全等于还要求不仅相等,数据类型也要相同
  6. ==!=是一对。===!==是一对,后者称为不全等于
  7. 字符串类型的数字与数字型的数字比较时,隐式转换为数字型的比较:'3' > 2
  8. 其实,字符串在连接运算(+)时必然使另一个元素隐式转化为字符串,在与数字-,*,/时是隐式转化为数字型的
  9. 关于逻辑运算符,与Java类似:有&&&|||的微妙区别(逻辑中断)
  10. 3 && 5返回5,0 && 5返回0。这其实正是逻辑中断的逻辑:当第一个表达式为假时,与运算不再继续
  11. 3 || 5返回3,0 || 5返回5。这其实正是逻辑中断的逻辑:当第一个表达式为真时,或运算不再继续
  12. 逻辑运算符也有优先级:&&优先级高于|| 。陷阱题:true || true && false答案为 true
     

 
流程控制

在形式上,与同为脚本语言的Python反而不像,与C或者Java一样

if - else if - else

switch - case - default

注意

  1. switch在匹配时是全等(===)匹配,要求数据类型严格一致
  2. 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

猜你喜欢

转载自blog.csdn.net/m0_46202073/article/details/106402813