本篇文章为作者在网上自学JS时的笔记,看的狂神的b站视频
视频链接
概述
本人认为JS的语法和Java,python及其相似,像是融合了这两种语言的语法
快速引入
引入JavaScript
内部标签
1 2 3
| <script> \\\ js代码 </script>
|
外部标签
1
| <script src = "xxx.js"></script>
|
基本语法
1 2 3 4 5 6 7
|
var num = 1; var name = "mcola"; var float = 1.1;
|
输出
1 2 3
| alert(xxx);
console.log(xxx);
|
数据类型
比较运算符
1 2 3 4 5 6 7
| = == ===
------------------------ NaN === NaN
|
数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| var array = [1,2,3,1.1,"mcola"];
array.length = 10; array.length = 2;
array.indexOf(1.1)
arr.slice(3);
arr.push('a');
arr.pop();
arr.unshift('a');
arr.shift();
arr.sort();
arr.reverse();
arr.concat([1,2,3]);
arr.join('-');
arr = [[1,2],[3,4]]
|
取数组下标,如果越界了就会显示undefined(未定义),而不是null(空)
对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| var person = { name:"mcola", age:20, school:ZJUT; }
person.name person.age
delete person.age;
person.hobby = "playing";
'age' in person
person.hasOwnProperty('age');
|
严格检查机制
1 2
| 'use strict' let num = 1;
|
字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| /' /t /n
// 输入多行字符串
var msg = ` hello world `
// 模板字符串 let name = "mcola"; let msg = `hello , ${name}` // 输出hello , mcola
// 字符串长度 string.length
// 字符串的不可变性 var str = "hello"; // 不能通过str[0]='a'来修改字符串
// 字符串的一些方法 // 大小写转换 student.toUpperCase() student.toLowerCase() // 获取某个元素的下标 student.indexOf('t') // 在student字符串中t元素所在的下标 // substring [) // 前闭后开 student.substring(1) // 从索引为1的字符截取到最后 student.substring(1,3) // 总索引为1的字符截取到索引为3(不包括3)的字符
|
Map
1 2 3 4 5
| var map = new Map([["tom",100],["jack",90]]); var score = map.get("tom");
map.set("mcola",123); map.delete("tom");
|
Set
1 2 3 4 5
| var set = new Set([1,2,3,3]); set.add(4); set.delete(3); set.has(1);
|
iterator遍历Map和Set
1 2 3 4 5 6 7 8 9
| var map = new Map([["tom",100],["jack",90]]); for (let x of map){ console.log(x); }
var set = new Set([1,2,3,3]); for (let x of set){ console.log(x); }
|
流程控制
if判断
1 2 3 4 5 6
| if(num>12){ xxx }else { xxx }
|
while循环
1 2 3 4 5 6 7 8 9 10
| while(n<m){ console.log(n); n++; }
do{ console.log(n); n++; }while(n<m)
|
for循环
1 2 3
| for (let i=0;i<10;i++){ console.log(i); }
|
数组循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var array = [1,2,3,1.2,"mcola"];
for(var i in array){ console.log(array(i); }
------------------------ for(var i of array){ console.log(i); }
array.forEach(function(value){ cosole.log(value); })
|
函数
定义方式一(建议)
1 2 3 4 5
| function abs(x){ if(x>=0){ return x; }else return -x; }
|
定义方式二
1 2 3 4 5
| var abs = function(x){ if(x>=0){ return x; }else return -x; }
|
调用函数
参数问题
可以传递任意个参数,也可以不传递参数
‘arguments’ 代表传进来的所有参数是一个数组,可以拿出来所有传入的参数
Rest
1 2 3
| function add(a,b,...rest){ console.log(rest); }
|
规避参数异常
1 2 3
| if(typeof x !== number){ throw 'Not a number'; }
|
变量的作用域
在函数体内用var定义的变量在函数体外是不能用的(闭包)
1 2 3 4 5 6 7 8
| 'use strict'; function f() { var x = 1; } x = x + 1;
---------------------------------------
|
内部函数可以访问外部函数的变量,反之不行
1 2 3 4 5 6 7 8
| 'use strict'; function f() { var x = 1; function f2(){ var y = x + 1; } var z = x + y; }
|
调用函数从内向外,内部屏蔽外部函数的同名变量
1 2 3 4 5 6 7 8 9
| function f() { var x = 1; function f2(){ var x = 'a'; console.log(x); } console.log(x); f2(); }
|
JS自动提升了变量的声明,但是不会提升赋值
1 2 3 4 5 6 7 8 9 10 11 12 13
| function f() { var x = '1'+y; console.log(x); var y = 2; }
function f2(){ var y; var x = '1'+y; console.log(x); y = 2; }
|
规范:把所有变量的定义全部放在最前面
1 2 3 4 5 6
| function f() { var x = 1, y = x + 1, z,m; }
|
全局变量:定义在函数外部
默认所有全局变量会自动绑定在window对象下,为了减少重名的冲突,把自己的代码全部放入自己定义的唯一空间名中(jQuery)
1 2 3 4 5 6 7
| var x = 1; function f(){ console.log(x); } console.log(window.x); alert(x); window.alert(x);
|
局部作用域:let
1 2 3 4 5 6
| function f() { for (var i = 0; i < 5; i++) { console.log(i); } console.log(i+1); }
|
使用let可以解决这个问题,建议使用let定义局部作用域
1 2 3 4 5 6
| function f() { for (let i = 0; i < 5; i++) { console.log(i); } console.log(i+1); }
|
常量 const
在ES6之前,约定全部大写的变量为常量,但是任然可以改变
1 2
| var PI = 3.14; PI = 213;
|
在ES6引入const,这样强制规定不能改变变量
方法
定义方式
把函数放在对象里
1 2 3 4 5 6 7 8 9 10 11 12 13
| var person = { name: mcola, birth: 2003, age: function(){ var now = new Date().getFullYear(); return now-this.birth; } }
person.name
person.age()
|