欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS入门

程序员文章站 2022-06-30 19:12:42
...

利用寒假一个多月的时间,重新学习下JS。参考文献:廖雪峰的官方网站
一步一步地学习并记下笔记复习。

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变量在不同的函数体内互不冲突。
不用var申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式。
转义字符
\n 表示换行
JavaScript把null、undefined、0、NaN和空字符串’'视为false,其他值一概视为true。

基本类型

JS的基本类型:
Number
String
boolean
undefined
null
Object

字符串:

字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果。
调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串
toUpperCase()
toLowerCase()
indexOf() 搜索指定字符串出现的位置
substring() 返回指定区间的子串

数组

indexOf() 搜索指定元素的位置
slice() 截取Array的部分元素,然后返回一个新的Array
push() 向末尾添加若干元素
pop() 把末尾的最后一个元素删除
unshift() 向头部添加若干元素
shift() 把头部第一个元素删除掉
sort() 对当前Array进行排序,它会直接修改当前Array的位置。
reverse() 把整个Array的元素给反转
splice() 修改Array的万能方法,可以从指定的索引开始删除若干元素,然后从该位置添加若干元素
concat() 把当前的Array和另一个Array连接起来,并返回一个新的Array
join() 把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

对象

由若干键值对组成。
如果属性名包含特殊字符,需要用’'括起来。访问这个属性也无法实用.操作符,必须用[‘xxx’]来访问。

条件判断

    if(){

    }else{

    }

    if(){

    }else if(){

    }else{

    }

循环

for循环
for(初始条件;结束条件;递增条件){

}
for循环最常用的地方是利用索引来遍历数组:

    var i,x
    for(i=0;i<arr.length;i++){
        x = arr[i];
    }

可以用break语句他退出循环。
for…in
它可以把一个对象的所有属性依次循环出来:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    console.log(key); // 'name', 'age', 'city'
}

由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for…in循环可以列出Array的索引:

var a = ['A', 'B', 'C'];
for (var i in a) {
    console.log(i); // '0', '1', '2'
    console.log(a[i]); // 'A', 'B', 'C'
}

注意:for…in对Array循环得到的是String而不是Number
while
while(){

}
while循环只有一个判断条件,条件满足就不断循环。
do {

}while()
是在每次循环完成时判断条件。

Map和Set

Map
Map是一组键值对的结构,具有极快的查找速度

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

初始化Map需要一个二维数组,或者直接初始化一个空的Map

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

Set
Set和Map类似,是一组key的集合,但不存储value。
由于key不能重复,所以在Set中,没有重复的key。

var s = new Set([])     //创建一个Set,需要提供一个Array
s.add()     //添加元素
s.delete()      //删除元素

iterable

遍历Array可以采用下标循环,遍历MapSet就无法使用下标。为了统一集合类型,ES6引入了新的iterable类型,Array、Map、Set都属于iterable类型
具有iterable类型的集合可以通过新的for…of来遍历。

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
    console.log(x);
}
for (var x of s) { // 遍历Set
    console.log(x);
}
for (var x of m) { // 遍历Map
    console.log(x[0] + '=' + x[1]);
}

更好的方法是直接使用iterable内置的**foreach()**方法,它接受一个函数,每次迭代就自动回调该函数。
Array为例:

var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    console.log(element + ', index = ' + index );
});

Set没有索引,回调函数前两个都是元素本身。
Map的回调函数的参数以此为value、key、map本身