1、数据类型
1 //isNaN()判断是否是非数字 2 console.log(isNaN("nihaoa")); //true 3 var age = 18; 4 console.log(isNaN(age)); //false 5 var num1 = 0o12; //八进制 6 var num2 = 0x12; //十六进制 7 console.log(num1);//10 8 console.log(num2);//18 9 console.log('她是'+age+'岁'); // 字符串与变量来拼接 10 //简单交互 11 /* 12 var age1 = prompt('请输入您的年龄'); //prompt取的值是字符串类型的 13 var str = '您今年已经' + age1 + '岁了呀'; 14 alert(str); 15 16 */ 17 //布尔类型 18 var flag = true; 19 var flag1 = false; 20 //运算的时候true当1,false当0 21 console.log(flag + 1);//2 22 console.log(flag1 + 1);//1 23 //声明一个变量未给值,,则为undefined类型 24 var a1; 25 console.log(a1);//undefined 26 console.log(a1 + 1); //NaN 27 console.log(a1 + 'hello'); //undefinedhello 28 29 //null类型 30 var space = null; 31 console.log(space + 1); //1 32 console.log(space + 'hello'); //nullhello 33 //获取变量数据类型 34 var num3 = 10; 35 console.log(typeof age); //number 36 var flag2 = true; 37 console.log(typeof flag2); //boolean 38 39 //数字转换为字符串三种方式: 40 // num.toString() 和 String(num) 和 字符串拼接 41 var num4 = 10; 42 var str4 = num4.toString(); 43 console.log(typeof str4); //string 44 var num5 = 20; 45 var str5 = String(num5); 46 console.log(str5); 47 var num6 = 30; 48 str6 = num6 + ''; 49 console.log(str6); 50 51 //字符串转数字 52 //parseInt()转整数 53 console.log(parseInt('3.14')); //3 54 console.log(parseInt('3.84')); //3 55 console.log(parseInt('60px')); //60 去单位 56 //parseFloat()转小数 57 console.log(parseFloat('3.14'));//3.14 58 //Number 59 console.log(Number('3.14'));//3.14 60 //js隐式转换(- * /) 61 console.log('666' - 0);//666 62 console.log('666' - '665');//1 63 console.log(666 - '-6');//672 64 65 //转换为布尔型 66 //Boolean() '',null,NaN,0,undefined 这5个都是false 67 console.log(Boolean(NaN));//false 68 69 //作业 70 var b1 = 1; 71 var b2 = 2; 72 var b3 = b1; 73 b1 = b2; 74 b2 = b3; 75 console.log('b1=' + b1); 76 console.log('b2=' + b2);
2、运算符和控制
1 //运算符 2 //不要直接对浮点数进行运算,存在精度问题 3 var a1 = 0.3; 4 var a2 = 0.1 + 0.2; 5 console.log(a1 === a2); 6 //自增运算符: 7 var a = 1; 8 var b = 1; 9 console.log(++a); //2 10 console.log(++a === a); //true 11 console.log(b++); //1 12 console.log(b++ + 1); //3 13 var c = 10; 14 console.log(c++ + ++c); //10+12=22 15 /*前置自增和后置自增的区别: 16 1、单独写时无区别:如 a++; 和 ++a; 两者效果一样,都是将a+1 17 2、其他情况下a++是先将a的值返回给表达式“a++”,再将a+1,而 18 ++a正好相反。 19 */ 20 //比较运算符 21 // == 判等号,会将字符串转为数字进行比较 22 var d = 3; 23 console.log(d == 3); //true 24 console.log(d != 3); //false 25 console.log(d == '3'); //true 26 console.log(d != '3'); //false 27 /// === 全等 ,要求数值云数据类型均一致 28 console.log(d === '3'); //false 29 // 逻辑运算符 30 console.log(1>0 && 3>2); //true 31 console.log(1>0 || 3<2); //true 32 console.log(!(2>2)); // true 33 console.log(!2); //false 34 35 //逻辑与短路:表达式1为真,则返回第表达式2的布尔值;1为假,则直接返回1 36 console.log(1 && 3>7); //false 37 console.log(null && 3>7); //null 38 //逻辑或短路:表达式1为真,则返回第表达式1的布尔值;1为假,则直接返回2 39 console.log(3 || 2); //3 40 console.log(0 || null); //null 41 //例子 42 var num = 0; 43 console.log(123 || num++); 44 console.log(num);//0 45 //运算符优先级: 46 // 小括号>一元运算符>算术运算符>比较运算符>相等运算符>逻辑运算符>赋值 47 48 //注:一元二元三元运算符组成的表达式都是有返回值的,可用变量来接收 49 // var a = num++; var a = 1+2; var a = 3 > 2 ? 1:2 50 51 //switch分支 52 var aa = 1; 53 switch (aa) { 54 case 1: // 当 aa===1 时执行 55 console.log('这是1'); 56 break;//没有break则会直接执行下面case 2 里面的语句,不做判断了,知道遇到break或结束; 57 case 2: 58 console.log('这是2'); 59 break; 60 default: 61 console.log('没有匹配') 62 } 63 //for循环 64 65 for (var i1 = 1; i1 <= 10; i1++) { 66 console.log('我爱你中国') 67 } 68 69 70 /* 输出倒三角 71 ********** 72 ********* 73 ******** 74 ******* 75 ****** 76 ***** 77 **** 78 *** 79 ** 80 * 81 82 var str = ''; 83 for (var i = 1; i <= 10; i++) { 84 for (var j = i; j <=10; j++) { 85 str += '*'; 86 } 87 str += ' '; 88 } 89 console.log(str); 90 91 */ 92 93 //输出九九乘法表 94 /* 95 //用for循环输出九九乘法表 96 var str = ''; 97 for (var i = 1; i <= 9; i++) { 98 for (var j = 1; j <= i; j++) { 99 str += j + 'x' + i + '=' + j*i + ' '; 100 } 101 str += ' '; 102 } 103 console.log(str); 104 105 */ 106 107 // 用while循环输出九九乘法表 108 var i = 1; 109 var str = ''; 110 while(i<=9){ 111 var j = 1; 112 while(j<=i){ 113 str += j + 'x' + i + '=' + j * i + ' '; 114 j++; 115 } 116 str += ' '; 117 i++; 118 } 119 console.log(str); 120 121 // do while循环 先执行一次循环体,再判断条件 122 k = 1; 123 do { 124 console.log('我爱你'+k); 125 k++; 126 } while (k <= 10); 127 128 //continue关键字:结束本次循环!for循环中则直接跳到i++上 129 //例子:计算当1-100之间除了能被7整除的整数的和超过3000的最大整数。 130 var sum1 = 0; 131 for (var m = 1; m <= 100; m++) { 132 if (m % 7 === 0) { 133 continue; 134 } 135 sum1 += m; 136 if (sum1 >= 3000) { 137 break; 138 } 139 } 140 console.log(m);
3、数组
2 var arr0 = [];//创建数组 3 var arr1 = [1, '你好', true, null, [123]]; 4 console.log(arr1); 5 console.log(arr1[2]); //true 索引访问数组 6 for (var i = 0; i < arr1.length; i++) { 7 console.log(arr1[i]); 8 } 9 10 //案例:求数组中的最大值 11 var arr2 = [2, 4, 7, 5, 6]; 12 var max = 0; 13 for (var i = 0; i < arr2.length; i++) { 14 if (arr2[i] > max) { 15 max = arr2[i]; 16 } 17 } 18 console.log('最大值是:'+max); 19 20 //数组操作 21 var arr3 = [1, 2, '3']; 22 arr3[6] = 6; 23 console.log(arr3); // [1, 2, "3", empty × 3, 6] 注意中间有三个undefined 24 arr3[0] = 11; 25 console.log(arr3); //通过索引替换数组元素 26 //案例:将数组arr4中的偶数放入到新数组 27 var arr4 = [1, 2, 3, 5, 7, 8, 22, 45, 67, 88, 90]; 28 var newArr = []; 29 for (var i = 0; i < arr4.length; i++) { 30 if (arr4[i] % 2 === 0) { 31 newArr[newArr.length] = arr4[i]; 32 } 33 } 34 console.log(newArr); 35 //案例:将数组元素反转 36 var arr5 = [1, 2, 3, 4, 5]; 37 var narr5 = []; 38 for (var i = arr5.length-1; i >= 0 ; i--) { 39 narr5[narr5.length] = arr5[i]; 40 } 41 console.log(narr5); 42 43 //案例:冒泡排序, 44 //很简单,10个数,比较9轮,第一轮比较9次,第一轮结束后最大的数排到了最后, 45 // 第二轮比较8次...第9轮比较一次即可。 46 //写个嵌套循环,第一个for控制轮数,第二个for控制每轮的次数 47 var temp = ''; 48 var arr = [2, 3, 8, 5, 4, 7, 9, 1, 6, 7 ]; 49 for (var i = 1; i < arr.length; i++) { 50 for (var j = 0; j < arr.length - i; j++) { 51 if(arr[j]>=arr[j+1]){ 52 temp = arr[j]; 53 arr[j] = arr[j + 1]; 54 arr[j + 1] = temp; 55 } 56 } 57 } 58 console.log(arr
4、函数
1 //函数 2 console.log(1 + undefined); //NaN 3 console.log('1' + undefined);//1undefined 4 function f(a,b) { 5 console.log(a + b); 6 } 7 //实数参个与形参个数不相等却不会报错,要是python早就报错了。 8 f(1,2); //3 9 f(1,2,3);//3 10 f(1);//NaN 11 f('aaa');//aaaundefined 12 console.log(f(1,2)); //函数没有返回值,则直接输出函数的结果为undefined,就像python中的None 13 14 //arguments :函数独有的内置对象,类似于python中的args,**kwargs来接收实参 15 //当无法确定实参的个数时,可以用arguments来保存实参,它的值是一个伪数组,有长度和索引, 16 //但是没有pop(),push()等方法。 17 function f1() { 18 console.log(arguments); 19 console.log(arguments.length); //5 20 console.log(arguments[1]); //2 21 } 22 f1(1,2,3,4,5)//Arguments(5) [1, 2, 3, 4, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ] 23 24 //案例:求实参的最大值 25 function f2() { 26 var max = arguments[0]; 27 for (var i = 1; i < arguments.length; i++) { 28 if (arguments[i] > max) { 29 max = arguments[i]; 30 } 31 } 32 return max; 33 } 34 console.log(f2(2,4,3,7,1)) //7 35 36 //函数冒泡排序 37 function f3(arr) { 38 for (var i = 1; i < arr.length; i++) { 39 for (var j = 0; j < arr.length - i; j++) { 40 if(arr[j]>=arr[j+1]){ 41 temp = arr[j]; 42 arr[j] = arr[j + 1]; 43 arr[j + 1] = temp; 44 } 45 } 46 } 47 return arr 48 } 49 console.log(f3([15,4,2,8,7,5,1])); //(7) [1, 2, 4, 5, 7, 8, 15] 50 // 函数的两种声明方式 51 //1、利用函数关键字自定义函数 52 function fn1() { 53 } // 无分号结尾 54 fn1(); 55 //2、函数表达式(匿名函数) 56 var fn2 = function () { 57 }; 58 fn2(); 59 //注意:fn2是变量名,不是函数名;可传参。 60 61 // 作用域 62 //全局作用域:script标签下面的,或者js文件下面的; 63 //局部作用域:在函数内部定义的。 64 //全局变量:在全局作用域下的变量 65 //局部变量:在函数内部声明的变量 66 //注意: 67 //1、在函数内部没有var声明直接赋值的变量也是全局变量 68 //2、当变量名重复时,选择就近原则访问 69 var num0 = 0; 70 var num1 = 10; 71 function f4() { 72 var num2 = 20; 73 num3 = 30; 74 num0 = 0.1; // 给局部变量赋值 75 console.log(num0); //0.1 局部变量 76 console.log(num1); //undefined 局部变量,下方声明并赋值,这里显示未赋值 77 console.log(num2); //20 局部变量 78 console.log(num3); //30 全局变量 因为num3未声明 79 var num0; //声明了num0,所以是局部变量 80 var num1 = 11; //声明并赋值 81 console.log(num1); //11 局部变量 82 var num4 = 40; 83 console.log(num4); //40 84 num4 = 44; // 前面已经声明,所以是局部变量 85 console.log(num4); //44 86 } 87 f4(); 88 console.log(num0);//0 89 console.log(num1);//10 90 //console.log(num2); //error 91 console.log(num3); //30 92 //console.log(num4); //error 93 94 // js引擎运行js分为两步:预解析+代码执行 95 //1、预解析:js引擎会把js里面的所有的var(变量解析)和function(函数解析)提升到当前作用域的最前面; 96 //2、代码执行:顺序执行 97 f5(); 98 function f5() { 99 } 100 f5(); 101 102 f6();//报错 103 var f6 = function () { 104 }; 105 f6(); 106 107 //案例 108 function f7() { 109 var a=b=c=1;//相当于var a=9; b=9; c=9; 110 console.log(a);//1 111 console.log(b);//1 112 console.log(c);//1 113 } 114 f7(); 115 console.log(c);//1 116 console.log(b);//1 117 console.log(a);//error 118 //注意:var a=9, b=0, c=9;与var a=b=c=9;的区别
5、对象
1 //创建对象三种方式 2 //1、利用对象字面量创建对象{} 3 //类似于python中的字典,里面是键值对的形式存储的 4 //变量和函数到了对象里面就成了属性和方法 5 var obj = { 6 name: 'wangyi', 7 age:18, 8 gender:'男', 9 eat:function () { 10 console.log('正在吃饭!') 11 } 12 }; 13 //调用: 14 console.log(obj.name); 15 console.log(obj['age']); 16 obj.eat(); 17 18 //利用new object创建对象 19 var obj1 = new Object(); //es5中, 创建空对象 20 obj1.name = 'wenwen'; 21 obj1.eat = function () { 22 console.log('雯雯正在吃饭!') 23 }; 24 console.log(obj.name); 25 26 //利用构造函数创建对象,将相同的属性和方法封装到函数里。类似于python中的类里面的构造方法__init__() 27 function Star(name,age,gender) { 28 this.name = name; 29 this.age = age; 30 this.gender = gender; 31 this.eat = function (foot) { 32 console.log('刘亦菲在吃'+foot) 33 } 34 } 35 var lyf = new Star('刘亦菲','23','女'); //new一个对象 36 console.log(lyf.name); 37 lyf.eat('蛋炒饭'); 38 //注意:构造函数名首字母大写;不要return;new不可少。 39 40 //遍历对象 41 for (var k in lyf) { 42 console.log(k); 43 console.log(typeof k); //string 44 console.log(lyf[k]); 45 } 46 47 //内置对象 48 //不是构造函数,不需要new来创建实例对象,直接用里面的属性和方法 49 //Math数学对象 50 console.log(Math.PI); //3.1415926... 51 console.log(Math.max(1,2,3,5,-1));//5 52 console.log(Math.max(1,2,'haha'));//NaN 53 console.log(Math.max());//-Infinity 54 55 console.log(Math.abs(-1));//1 绝对值 56 console.log(Math.abs('666'));//666 57 console.log(Math.abs('haha'));//NaN 58 console.log(Math.floor(3.94));//3 向下取整 59 console.log(Math.ceil(3.14));//4 向上取整 60 console.log(Math.round(3.14));//3 四舍五入 61 console.log(Math.round(-1.3));//-1 62 console.log(Math.round(-1.5));//-1 特殊 63 console.log(Math.round(-1.6));//-2 64 //random()随机数方法 65 console.log(Math.random()); 66 //获得两个数之间的随机整数,包括着两个数 67 function getRandomInt(min, max) { 68 return Math.floor(Math.random() * (max - min + 1)) + min; 69 } 70 console.log(getRandomInt(0,9)); 71 72 //案例:猜字游戏 73 /* 74 num = getRandomInt(1,10); 75 while (true ) { 76 num1 = prompt("请猜1-10之间的一个数"); 77 if (num1 == num) { 78 alert("恭喜你猜对了"); 79 break; 80 }else if (num1 > num) { 81 alert("猜大了"); 82 }else if (num1 < num) { 83 alert("猜小了"); 84 } 85 } 86 */ 87 88 /* 89 var i = 1; 90 var num2 = 3; //猜的次数 91 do { 92 num1 = prompt("请猜1-10之间的一个数"); 93 i++; 94 if (num1 == num) { 95 alert("恭喜你猜对了"); 96 break; 97 }else if (num1 > num) { 98 alert("猜大了"); 99 if (i > num2) { 100 alert("三次都没猜出,游戏结束"); 101 } 102 }else if (num1 < num) { 103 alert("猜小了"); 104 if (i > num2) { 105 alert("三次都没猜出,游戏结束"); 106 } 107 } 108 }while (i <= num2); 109 */ 110 111 /* 112 num = getRandomInt(1,10); 113 for (var i = 0; i < 3; i++) { 114 num1 = prompt("请猜1-10之间的一个数"); 115 if (num1 == num) { 116 alert("恭喜你猜对了"); 117 break; 118 }else if (num1 > num) { 119 alert("猜大了"); 120 if (i==2) { 121 alert("三次机会用完,游戏结束") 122 } 123 }else if (num1 < num) { 124 alert("猜小了"); 125 if (i==2) { 126 alert("三次机会用完,游戏结束") 127 } 128 } 129 } 130 */ 131 132 // Date 日期时间对象 是一个构造函数,必须使用new来创建日起对象 133 var date = new Date(); 134 console.log(date);//当前系统时间 135 var date1 = new Date('2020-06-10 07:26:03'); 136 console.log(date1); //Wed Jun 10 2020 07:26:03 GMT+0800 (中国标准时间) 137 console.log(date.getFullYear()); //获得年份 138 //输出日期 国人习惯 139 var year = date.getFullYear();//年 140 var month = date.getMonth()+1;//月 0-11 141 var day = date.getDate();//日 142 var week = date.getDay();//星期 0-6 143 var arr_week =['星期日','星期一','星期二','星期三','星期四','星期五','星期六']; 144 var hour = date.getHours(); 145 hour = hour<10?'0'+hour:hour; 146 var minute = date.getMinutes(); 147 minute = minute<10?'0'+minute:minute; 148 var second = date.getSeconds(); 149 second = second<10?'0'+second:second; 150 //今天是2020年6月10日 星期三 08:41:10 151 console.log('今天是'+year+'年'+month+'月'+day+'日 '+arr_week[week]+' '+hour+':'+minute+':'+second); 152 //获取1970年至今的总毫秒数 153 console.log(date.valueOf());//1591749670361 154 console.log(date.getTime()); 155 console.log(+new Date()); 156 console.log(Date.now()); //H5新增 157 158 //案例:倒计时 159 function countDown(time) { 160 var nowtTime = +new Date(); // 现在时间 161 var inputTime = +new Date(time); //输入的时间 162 var times = (inputTime - nowtTime) / 1000; //时间差 秒 163 var d = parseInt(times / 60 / 60 / 24);//天数 164 d = d < 10 ? '0' + d : d; 165 var h = parseInt(times / 60 / 60 % 24);//小时数 24以内 166 h = h < 10 ? '0' + h : h; 167 var m = parseInt(times / 60 % 60);//分 60以内 168 m = m < 10 ? '0' + m : m; 169 var s = parseInt(times % 60); 170 s = s < 10 ? '0' + s : s; 171 return '剩余时间:'+d+'天'+h+'时'+m+'分'+s+'秒' 172 } 173 console.log(countDown('2020-6-11 00:00:00')); 174 175 176 //数组内置对象 177 var arr = [1,2,3]; 178 var arr1 = new Array();//创建一个空数组 179 var arr2 = new Array(3);//长度为3的空数组 写一个数表示长度 180 var arr3 = new Array(1,2);// 写2个数以上表示初始化数组 [1,2] 181 //检测是否为数组 182 //1、instanceof 183 var arr = []; 184 var obj = {}; 185 console.log(arr instanceof Array);// true 186 console.log(obj instanceof Object);// true 187 //2、Array.isArray() H5新增 188 console.log(Array.isArray(arr)); //true 189 190 //数组的增删 191 //push()末尾追加 192 var arr = [1, 2, 3]; 193 arr.push(4, 5, 6); //返回值是数组的长度 194 console.log(arr.push(4, 5, 6)); //9 195 console.log(arr); 196 //unshift()前面添加数组元素,也会返回数组长度 197 arr.unshift('wy','wenwen'); 198 console.log(arr); 199 //pop()删除最后一个元素,并返回元素 200 arr.pop(); 201 console.log(arr);//(10) ["wy", "wenwen", 1, 2, 3, 4, 5, 6, 4, 5] 202 console.log(arr.pop());//5 203 //shift(),删除第一一个元素,其他跟pop一样 204 arr.shift(); 205 206 //数组翻转 reverse() 207 var arr = [4,2,6,5,8];//[8, 5, 6, 2, 4] 208 arr.reverse(); 209 console.log(arr); 210 //sort排序 211 arr.sort(); 212 console.log(arr);//[2, 4, 5, 6, 8] 213 214 //多位数的排序有问题 215 var arr = [3,11,2,55,4]; 216 arr.sort(); 217 console.log(arr);//[11, 2, 3, 4, 55] 218 //解决: 219 arr.sort(function (a,b) { 220 return a-b;//升序, b-a为降序 221 222 }); 223 console.log(arr);//[2, 3, 4, 11, 55] 224 225 //数组索引号 226 // indexOf() 从前往后查找,返回给定元素的索引号,多个取第一个,无则返回-1 227 var arr = [1, 2, 3, 2, 4, 5,'wy']; 228 console.log(arr.indexOf(2)); //1 229 console.log(arr.indexOf('wy')); //6 230 console.log(arr.indexOf('wyy')); //-1 231 console.log(arr.lastIndexOf(2)); //3 从后往前找 232 //案例:数组去重 233 //方法一:拿着旧数组元素取新数组找索引,没有则新增 234 var arr = [1,2,3,2,5,4,1,5,8,9]; 235 function arrQc(arr) { 236 newArray = []; 237 for (var i = 0; i < arr.length; i++) { 238 if(newArray.indexOf(arr[i]) === -1){ 239 newArray.push(arr[i]); 240 } 241 }return newArray; 242 } 243 console.log(arrQc(arr));//[1, 2, 3, 5, 4, 8, 9] 244 //方法二:如果元素的前后索引值不相等,就删了它 245 var arr = [1,2,2,3,1,4,5,1,3]; 246 for (var i = 0; i < arr.length; i++) { 247 if(arr.indexOf(arr[i]) !== arr.lastIndexOf(arr[i])){ 248 arr.splice(i,1) //从指定位置删除指定个数的元素 249 } 250 } 251 console.log(arr);//[2, 3, 4, 5, 1] 252 253 254 //数组转为字符串 255 var arr = [1, 2, 3, 'hello']; 256 console.log(arr.toString());//1,2,3,hello 257 console.log(arr);//原数组不变 258 console.log(arr.join('-'));//1-2-3-hello 259 260 //数组删除元素,返回删除元素组成的数组,会改变原数组 261 arr.splice(0,1); 262 console.log(arr);//[2, 3, "hello"] 263 console.log(arr.splice(0,2));//[2,3] 264 //数组截取slice(start,end) 不包括end,返回截取部分组成的元组,不会影响原数组 265 var arr = [1,2,3,4,5,6]; 266 console.log(arr.slice(2,4)); 267 console.log(arr); 268 269 270 //字符串对象 271 var str = 'zhangwenwen'; 272 console.log(str.length);//11 273 //为什么字符串作为一简单的数据类型会有属性length?因为js对其进行了基本包装,把基本数据类型包装成 274 //复杂数据类型。 275 var temp = new String('zhangwenwen');//创建临时变量,用完就删 276 var str = temp; //现在str就是实例对象了 277 278 //字符串的值不可变 279 //通过在内存中开辟新空间来存储新的字符串 280 281 //字符串索引 282 console.log(str.indexOf('w'));//5 从前往后找,第一个 283 console.log(str.lastIndexOf('w'));//8 从后往前找,第一个 284 console.log(str.indexOf('w',6));//8 ,从索引号6开始从前往后找 285 286 //案例:查找字符串“danjgajbgjsjgakalglaj”中j出现的位置和次数 287 var str = 'danjgajbgjsjgakalglaj'; 288 for (var i = 0; i < str.length; i++) { 289 if(str[i] === 'j'){ 290 console.log(i) 291 } 292 } 293 //字符串操作方法 294 var str = 'abcdefg'; 295 //slice(start,end)截取 296 console.log(str.slice(2,4)); //cd 297 //concat()连接 298 console.log(str.concat('你好'));//abcdefg你好 299 //replace替换 有多个则只能替换一个 300 console.log(str.replace('c','三'));//ab三defg 301 //split()转换为数组 302 console.log(str.split('d'));//["abc", "efg"] 303 304 //toUpperCase()转大写 toLowerCase()小写 305 console.log(str.toUpperCase());//ABCDEFG 306 307 308 //js中简单数据类型:string,number,boolean,undefined,null 309 //复杂数据类型:Obj,Array,Date等 310 //简单数据类型传参,因为数据不可变,所以是值传递 311 function f(a) { 312 a++; 313 console.log(a);//11 314 } 315 var x =10; 316 f(x); 317 console.log(x);//10 318 //复杂数据类型传参,因为数据可变,所以穿的是引用,类似于python中的传参 319 function f1(arr1) { 320 arr1.push(4); 321 console.log(arr1)//[1, 2, 3, 4] 322 } 323 var arr = [1,2,3]; 324 f1(arr); 325 console.log(arr);//[1, 2, 3, 4]