JS基础学习笔记

一、对象:

  • 面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程

  • 面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果

  • 面向对象特性:封装,继承,多态 (抽象性)

  • 什么是对象?

    • 看的见,摸得到,具体特指的某个东西
    • 找对象
    • 描述找对象
    • 文字描述找对象
    • 小明牵着小黄去逛街
    • 一台电视机正在播放影片
  • JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成

    • js不是面向对象的语言,但是可以模拟面向对象的思想

    • js是一门基于对象的语言:

    • 万物皆对象:---------->程序猿 程旭媛

    • 创建对象三种方式:

      1. 调用系统的构造函数创建对象
        var 变量名= new Object(); Object 是系统的构造函数 Array

      2. 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
        自己定义的对象,即java里的自定义类 ,列如:domain

      • 3.字面量的方式创建对象
      • ·相当于一次性对象,修改不灵活
  • 标准对象:number、string、boolean、function和undefined,object:null、Array、{},Data、RegExp、JSON

二、数组:

就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。
数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。
数组:存储一组有序的数据
数组的作用:一次性存储多个数据

  1. 数组的定义方式:

    1. 构造函数定义数组: var 数组名=new Array();
      • 空数组:var arr1=new Array();
      • 长度为5的数组,每个数据的值是undefined: var arr2=new Array(5);
      • 长度为5分数组,var arr3=new Array(1,2,3,4,5);
    2. 字面量方式定义数组:var 数组名=[];
      • 空数据:var arr4=[];
      • 长度为3的数组,值分别为: 1,2,3: var arr5=[1,2,3]
      • 数组中元素的值的类型可以不一样: var arr6=["red","blue","green",1,true];
      • 设置数组的元素的值: arr7[0]=10; arr7[1]=20;
  2. 数组的遍历:

    • for(var i=0;i<arr.length;i++){ console.log(arr[i]); }
    • for(var key in arr) { console.log(key + “==” + arr[key]);
  3. 数组常用api方法:

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

三、Map Set:

  • map键值对,ES5中键的值只能是字符串,ES6中引入map键的值可以为数字,get和set
  • set:存储不重复的键;add和delete

四、iterable类型:Array、Map和Set都属于iterable类型。

  • for … in iterable 循环集合元素的名字
  • for … of iterable 循环集合本身的元素:

五、函数:

函数的三种定义方式
  1. 命名函数:函数如果有名字,就是命名函数
    function f1() { 
      console.log("我是一个函数");
     };
    调用:f1()
    
  2. 匿名函数:函数如果没有名字,就是匿名函数
     function () {
        console.log("我是一个函数");
           };
          调用:不能直接调用
    
  3. 函数表达式:
       var f4 = function () { 
         console.log("我是一个函数");
         };
      调用:f4()
      注意:如果console.log(f1);的话 输出的是函数f1的代码
        ```
    

函数是一种数据类型,可以作为参数,也可以作为返回值

  • 作用域:使用范围

  • 全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
    除了函数以外,其他的任何位置定义的变量都是全局变量
    如果页面不关闭,那么就不会释放,就会占空间,消耗内存

  • 局部变量:在函数内部定义的变量,是局部变量,外面不能使用

  • 全局作用域:全局变量的使用范围

  • 局部作用域:局部变量的使用范围

  • 块级作用域:

一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,
但是在js中在这个块级作用域中用var定义的变量,外面也能使用; 说明js没有块级作用域,只有函数除外。
为了解决块级作用域,ES6引入了新的关键字let,const
let:替代var可以申明一个块级作用域的变量:let声明的变量可以改变,值和类型都可以改变,没有限制。
const替代var来定义一个块级作用域的常量,const声明的变量不得改变值,const一旦声明变量,就必须立即初始化,不能留到以后赋值
const定义的数组和对象,变量名不指向数据,而是指向数据所在的地址。
const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,通常用全部大写的变量来表示“这是一个常量,不要修改它的值”:

 this的使用:
   普通函数中的this:
      this指当前所处模块的父亲节点,在当前模块下使用this可以访问当前模块的兄弟节点
   箭头函数中的this:
       箭头函数根本没有自己的this,导致内部的this就是外层代码块的this,即箭头函数中的大括号忽略掉,按普通函数规则来处理,看this的指向节点
 隐式全局变量:声明的变量没有var,就叫隐式全局变量
 全局变量:使用var 定义是不能被删除的,隐式全局变量是可以被删除的


 预解析(变量提升):就是在解析代码之前
 预解析做什么事?
 它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部
 因为JavaScript引擎自动提升了变量的声明,但不会提升变量的赋值
 把变量的声明提前了----提前到当前所在的作用域的最上面
 函数的声明也会被提前---提前到当前所在的作用域的最上面	

 常用的高阶函数:
 Array的
 map(function):传入一个函数,把arr里的单个元素进行函数计算,得到结果作为一个新的arr
 filter(function):和map()类似,不同的是,filter()根据返回值是true还是false决定保留还是丢弃该元素。
 forEach():和map()类似,它也把每个元素依次作用于传入的函数,但不会返回新的数组。forEach()常用于遍历数组,因此,传入的函数不需要返回值:
 sort(function):传入一个函数,对函数定义的方式进行排序,不需要管函数内部怎么进行,返回值为1的在前,返回值为-1的在后,还要有0的情况,
 reduce(function);传入一个函数,把arr里的前两个元素进行函数计算,计算得到的结果作为第一个参数继续计算,直到最后只剩两个的时候结束。
 every(function) :判断数组的所有元素是否满足函数的测试条件,必须全部满足才为true
 findIndex(function)和find(function);用于查找符合条件的“第一个元素”,find返回元素,findIndex返回索引

 闭包:当一个函数执行返回了另外一个函数后,其内部相关的局部变量和参数还被新函数引用,这种称为“闭包(Closure)

#六、标准对象
Data、RegExp、JSON

七、錯誤:

  错误分两种:
  一种是程序写的逻辑和语法不对,导致代码执行异常
  一种是执行过程中,程序可能遇到无法预测的异常情况而报错,例如,网络连接中断,读取不存在的文件,没有操作权限等。
  第二种需要处理:try ... catch ... finally
                  有错误catch会捕获,并输出错误,finally无论有没有错误都执行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值