js笔记--基础部分

A.字符串

  1.字符串是不可变的,如果对字符串的某个索引赋值,不会有报错,但字符串不会改变;以下这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:

  2.toUpperCase()把一个字符串全部变为大写;

  3.toLowerCase()把一个字符串全部变为小写;

  4.indexOf()会搜索指定字符串出现的位置;

  5.substring(start,end)返回指定索引区间的子串,end可以省略(默认到字符串结束)

B.数组

  arr=['A','B','C','D']
  1.arr.length; 显示数组arr的长度。若重新定义arr.length 则arr长度发生改变:
    例:arr.length=6 则arr=['A','B','C','D',undefined,undefined],
      arr.length=2 则arr=['A','B']
     即大于当前数组长度时,多出的元素值为undefined;小于当前数组长度时,相当于删除操作。

  2.与字符串不同,数组可以通过坐标索引,在原数组的基础上进行修改:
    例:arr[1]='b'; 则arr=['A','b','C','D']
     如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:
    例:arr[6]='G' 则arr=['A','B','C','D',undefined,undefined,'G']
   *大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误(但不建议使用)

  3.indexOf()函数,查找指定元素的下标索引,找到返回下标,没找到返回-1
    例:arr.indexOf('B') 返回1
      arr.indexOf('K') 返回-1,没找到元素位置,返回值为-1

  4.slice()切割数组函数,截取数组的一部分,返回一个新的数组:
    例:var a1=arr.slice(0, 2) 则a1=['A','B'] 截取数组下标从0-2,但不包括下标2
      var a2=arr.slice() 则a2=['A','B','C','D'] 不写任何参数相当于copy原数组
      var a3=arr.slice(2) 则a3=['C','D'] 从下标2处开始截取,直到数组结束
  
  5.push()向Array的末尾添加若干元素
    例:arr.push('E','F') 则arr=['A','B','C','D','E','F']

  6.pop()把Array的最后一个元素删除掉
    例:arr.pop() 则arr=['A','B','C']
   空数组继续pop不会报错,而是返回undefined

  7.unshift()函数,向Array的头部添加若干元素
    例:arr.unshift('E','F') 则arr=['E','F','A','B','C','D']

  8.shift()方法则把Array的第一个元素删掉
    例:arr.shift() 则arr=['B','C','D']
   空数组继续shift不会报错,而是返回undefined

  9.sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序

  10.reverse()反转函数,倒序

  11.splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素,该返回值为数组包含被删除元素
    例:arr=['A','B','C','D']
      // 从索引1开始删除3个元素,然后再添加两个元素:
      arr.splice(1, 3, 'Google', 'Facebook') 则arr=['A', 'Google', 'Facebook'],方法返回值['B','C','D']
      //从索引2开始删除2个元素 只删除,不添加:
      arr.splice(2, 2) 则arr=['A','B'],方法返回值['C','D']
      // 只添加,不删除:
      arr.splice(2, 0, 'Google', 'Facebook') 则arr=['A','B','C','Facebook', 'Oracle','D'],方法返回值[],因为没有删除任何元素

      12.concat()方法把当前的Array和另一个Array连接起来(该方法并没有修改当前Array,而是返回了一个新的Array)
    例:var added = arr.concat([1, 2, 3]); 则added=['A','B','C','D',1, 2, 3]
    concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里
    例:var added=arr.concat(1, 2, [3, 4]); 则added=['A','B','C','D',1, 2, 3,4]

   13.join()把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
    例:str=arr.join('-') 则str='A-B-C-D'

C.对象

  1.访问不存在的属性不报错,返回undefined

  2.访问xiaohong的name属性,一般使用xiaohong.name,也可用xiaohong['name']

  3.判断一个对象是否包括某个属性,属性名 in 对象名,若返回值为true则包括,false则不包括
    例:var result='name' in xiaoming 若result=true,包括;result=false ,不包括
   这种方法判断的属性不一定是该对象自身的,也可能是他继承的

  4.过滤掉对象继承的属性,判断自身是否包含该属性,用hasOwnProperty()
    例:xiaoming.hasOwnProperty('name') true则存在,false则不包括

D.循环

  1.for ... in对Array的循环得到的是String而不是Number. for(var key in arr)

  2.do { ... } while()循环要小心,循环体会至少执行1次,而for和while循环则可能一次都不执行

E.Map(新增数据类型)

  1.Map一种键值对结构,结构上类似于二维数组,作用上和Python的字典类似,一个key对应一个value

  2.可以在初始化时为Map赋值
    例:var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
  3.也可先定义一个空的Map,后面再填值
    例:var m = new Map();

  4.Map的主要方法:
    (1)添加新的key-value ,多次对一个key放入value,后面的值会把前面的值冲掉
      m.set('Adam', 67);
    (2)判断是否存在某个key值,返回布尔值
      m.has('Adam');
    (3)获取某个key值对应的键值,若不存在该key值,返回undefined
      m.get('Adam');
    (4)删除某个key值对应的键值对
      m.delete('Adam');

F.Set(新增数据类型)

  1.一组key的集合,但不存储value。由于key不能重复,在Set中,没有重复的key。功能相当于自带重复判断的数组

  2.定义Set
    例:var s1 = new Set(); // 空Set
    var s2 = new Set([1, 2, 3]); // 含1, 2, 3

    重复元素在Set中自动被过滤:
    var s = new Set([1, 2, 3, 3, '3']);
    s; // Set {1, 2, 3, "3"}

  3.Set的主要方法:
    (1)添加key值
    s.add(4);
    (2)删除key值
    s.delete(4);

G.iterable(新增)

  1.遍历Array可以采用下标循环,遍历Map和Set无法使用下标。
   为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。

  2.具有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]);
      }
  3.for ... of循环和for ... in循环有何区别?
   for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
   当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:
      var a = ['A', 'B', 'C'];
      a.name = 'Hello';
      for (var x in a) {
        console.log(x); // '0', '1', '2', 'name'
      }
   for ... in循环将把name包括在内,但Array的length属性却不包括在内。for ... of循环则完全修复了这些问题,它只循环集合本身的元素:
      var a = ['A', 'B', 'C'];
      a.name = 'Hello';
      for (var x of a) {
        console.log(x); // 'A', 'B', 'C'
      }
   这就是为什么要引入新的for ... of循环。

参考自廖雪峰老师的官方网站

posted @ 2019-08-29 17:43  菠萝tang的学习日记  阅读(155)  评论(0编辑  收藏  举报