JS总结(一)

基本数据类型

Undefibed类型

一个声明后没有被赋值的变量会有一个默认值undefined

Null

一个声明变量给 null 值,里面存的值为空

Number

既可以保存整数,也可以保存浮点数,其中八进制前面加0,十六进制前面加0x

  • 三个特殊值
    Infinity:无穷大
    -Infinity:无穷小
    NaN:非数值
  • isNaN(变量) 用来判断一个变量是否为非数字的类型,返回 true 不是数值,返回 false是数值
String

字符串型可以是引号中的任意文本

  • JS 可以用单引号嵌套双引号 ,或者用双引号嵌套单引号
  • 字符串转义符
    \n 换行
    \\ 斜杠
    \t tab缩进
    \b 空格
  • 字符串长度,length 属性可以获取整个字符串的长度
  • 字符串拼接 " + "
    字符串 + 任何类型 = 拼接之后的新字符串
Boolean

布尔类型有两个值:true 和 false , 和数字相加时,true为1,false为0

  • 操作符 typeof
    可以检测变量的数据类型(object,number,unction,boolean,undefined)
    :typeof null = object
  • 字面量:字面量是在源代码中一个固定值的表示法
    • 数字:1,2等
    • 字符串:“字符串”,‘字符串’
    • 布尔:true,false
  • 数据类型的转换
    • 转换为字符串
      toString() 变量.toString()
      String() String(变量) 强制转换
      加号拼接字符串 隐式转换
    • 转换为数字型
      parseInt() parseInt(变量) 整型
      parseFloat() parseFloat(变量) 浮点数
      Number() Number(变量)
      ( -,*,/) 隐式转换是我们在进行算数运算的时候,JS 自动转换了数据类型
    • 转换为布尔型
      Boolean() Boolean(变量)
      代表空、否定的值会被转换为 false ,如 ’ '、0、NaN、null、undefined ,其余值都会被转换为 true

引用类型

Object
Array数组
  • 创建数组的方法(数组中可以存放任意类型的数据)
    • 利用 new 创建数组:var 数组名 = new Array();
    • 利用数组字面量创建数组:var 数组名 = [ ‘元素1’ , ‘元素2’ , ‘元素3’ ];
  • 获取数组中的元素

    利用索引号获取,如果访问时数组没有和索引值对应的元素,则得到的值是undefined

  • 遍历数组
    • 数组的长度:默认情况下表示数组中元素的个数
      数组名.length 可通过改变数组length属性的值改变数组的元素个数
  • 数组中新增元素

    数组[ 数组.length ] = 新数据;

  • 检测是否为数组
    • instanceof 运算符 :可以判断一个对象是否是某个构造函数的实例
      • 用法
        var 变量名 = 对象名 instanceof 构造函数名称;
    • Array.isArray() 用于判断一个对象是否为数组, 是 HTML5 中提供的方法
      Array.isArray(对象名);
  • 添加删除数组元素的方法

    pop() 删除数组的最后一个元素并返回删除的元素。
    push() 向数组的末尾添加一个或更多元素,并返回新的长度。
    shift() 删除并返回数组的第一个元素。
    unshift() 向数组的开头添加一个或更多元素,并返回新的长度。

  • 数组排序

    reverse() 反转数组的元素顺序。
    sort() 对数组的元素进行排序。

arr.sort(function(a, b) { 
    return b - a;      // 降序 
    // return a - b;   // 升序 
}); 
  • 数组转化为字符串
    toString() 把数组转换为字符串,逗号分隔每一项,返回一个字符串
    join(‘分隔符’) 把数组中的所有元素转换为一个字符串,返回一个字符串
  • 数组索引方法
    indexOf() 搜索数组中的元素,并返回它所在的位置,如果不存在,返回-1
    lastIndexOf() 搜索数组中的元素,并返回它最后出现的位置,如果不存在,返回-1
  • 迭代方法
    forEach() 数组每个元素都执行一次回调函数。
    filter() 检测数值元素,并返回符合条件所有元素的数组。
    some() 检测数组元素中是否有元素符合指定条件。
Function
Date
  • Date实例化
    • 无参数 :var now = new Date();
    • 有参数 :var future = new Date(‘2019/5/1’);
      参数分为数字型和字符串型,建议使用字符串型
  • 方法
    getFullYear() 从 Date 对象以四位数字返回年份。
    getMonth() 从 Date 对象返回月份 (0 ~ 11)。
    getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
    getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
    getHours() 返回 Date 对象的小时 (0 ~ 23)。
    getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
    getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
    获取总毫秒:基于1970年1月1日(世界标准时间)起的毫秒数
    valueOf(),getTime()
    var date = +new Date();
    Date.now()(H5新增的)
RegExp

正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。

  • 创建正则表达式
    • 通过调用 RegExp 对象的构造函数创建
      var 变量名 = new RegExp(/表达式/);
    • 通过字面量创建
      var 变量名 = /表达式/;
  • 测试正则表达式 test
    test() 正则对象方法,用于检测字符串是否符合该规则
  • 特殊字符
    • 边界符=
      ^ 表示匹配行首的文本(以谁开始)
      $ 表示匹配行尾的文本(以谁结束)
    • 方括号[]
      [abc] 查找方括号之间的任何字符。
      [^abc] 查找任何不在方括号之间的字符。
      [0-9] 查找任何从 0 至 9 的数字。
      [a-z] 查找任何从小写 a 到小写 z 的字符。
      [A-Z] 查找任何从大写 A 到大写 Z 的字符。
      [A-z] 查找任何从大写 A 到小写 z 的字符。
      [adgk] 查找给定集合内的任何字符。
      [^adgk] 查找给定集合外的任何字符。
      (red|blue|green) 查找任何指定的选项。
    • 量词符
      * 重复0次或更多次
      + 重复1次或更多次
      ? 重复0次或1次
      {n} 重复n次
      {n,} 重复n次或更多次
      {n,m} 重复n到m次
  • 正则表达式参数
    /表达式/[switch]
    switch有三种值:
    g:全局匹配
    i:忽略大小写
    gi:全局匹配 + 忽略大小写
内置对象 Math (不是构造函数)
  • 常见属性和方法
    Math.PI 圆周率
    Math.floor() 向下取整
    Math.ceil() 向上取整
    Math.round() 四舍五入 就近取整 ,注意 -3.5 结果是 -3
    Math.abs() 绝对值
    Math.max()/Math.min() 求大和小值
    Math.random() 获取范围在[0,1)内的随机值
  • 获取指定范围内的随机整数
function getRandom(min, max) {   
  return Math.floor(Math.random() * (max - min + 1)) + min;  
} 
1
基本包装类型 :String、Number、Boolean

基本包装类型:把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

  • String
    • 字符串的不可变
      指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
    • 根据字符返回位置
      indexOf(‘要查找的字符’ , 开始的位置) 返回指定内容在原字符串中的位置,如果找不到就返回-1
      lastIndexOf() 从后往前找,只找第一个匹配的。
    • 根据位置返回字符
      charAt(index) 返回指定位置的字符
      charCodeAt(index) 返回指定位置的字符的ASCII码
      str[index] 获取指定位置的字符 HTML5
    • 字符串操作方法
      concat() 连接两个或更多字符串等效于 + ,并返回新的字符串。
      slice(start,end) 提取字符串的片断,并在新的字符串中返回被提取的部分。
      substr(start,取的个数) 从起始索引号提取字符串中指定数目的字符。
      substring(start,end) 提取字符串中两个指定的索引号之间的字符,基本与slice相同,不接受负值
      trim() 方法会从一个字符串的两端删除空白字符。
    • replace() 方法:在字符串中用一些字符替换另一些字符。
      replace(被替换的字符串, 要替换为的字符串);
    • split(‘分隔符’) 方法:用于切分字符串,它可以将字符串切分为数组,返回一个新数组
  • Number
    • var num = new Number(value);
    • toFixed(x) 把数字转换为字符串,结果的小数点后有指定位数的数字。
  • Boolean
    • var 变量名 = new Boolean(true/false);

作用域、内存

  • 全局作用域:作用于所有代码执行的环境
  • 局部作用域:作用于函数内的代码环境
  • JS没有块级作用域,但有模仿块级作用域
    (function(){
    //这里是块级作用域
    })();
  • 变量的作用域
    全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
    局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销 毁,因此更节省内存空间
  • 预解析
    预解析会把变量和函数的声明在代码执行之前执行完成。
    • 变量的提升:变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。
    • 函数的提升函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
  • 堆和栈
    • 栈:由操作系统自动分配释放存放函数的参数值、局部变量的值等,简单数据类型存放到栈里面
    • 堆:存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收,复杂数据类型存放到堆里面
  • 传参
    • 简单类型的传参:当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。
    • 复杂类型的传参:当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地 址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

对象

面向对象

优点 易维护、易复用、易扩展,由于面向对象有封装、继承、多 态性的特性,可以设计出低耦合的系统,使系统 更加灵 活、更加易于维护
缺点 性能比面向过程低

创建对象
  • 使用对象字面量创建对象 {},采用键值对的形式表示
    var 对象名 = { };

  • 利用 new Object 创建对象
    var 对象名 = new Obect();

  • 利用构造函数创建对象
    构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

    构造函数的封装格式和调用格式

function 构造函数名(形参1,形参2,形参3) {     
  	this.属性名1 = 参数1;     
	this.属性名2 = 参数2;     
	this.属性名3 = 参数3;     
	this.方法名 = 函数体; 
}
var 变量名 = new 构造函数名(实参1,实参2,实参3)

遍历对象 for in 语句

for (变量 in 对象名字) { } 通常我们会将这个变量写为 k 或者 key

对象方法
  • Object.keys() 方法返回一个所有元素为字符串的数组。
  • Object.defineProperty() 定义新属性或修改原有的属性。

构造函数和原型

静态成员和实例成员
  • 实例成员:构造函数内部通过this添加的成员
  • 静态成员:在构造函数本身上添加的成员
构造函数原型prototype

构造函数通过原型分配的函数是所有对象所共享的。
JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。注意这个prototype就是一个对 象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。

对象原型__proto__

对象都会有一个属性 proto 指向构造函数的 prototype 原型对象

constructor 构造函数

对象原型( proto)和构造函数(prototype)原型对象里面都有一个属性 constructor 属性 ,constructor 我们称 为构造函数,因为它指回构造函数本身

原型链

JavaScript 的成员查找机制是根据原型链在查找的

继承:通过构造函数+原型对象模拟实现继承,被称为组合继承
  • 属性继承:通过 call() 把父类型的 this 指向子类型的 this
  • 方法继承:借用原型对象

函数

函数的定义方式
  • 自定义函数方式(命名函数)
    function fn() {…}
    调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面
  • 函数表达式方式(匿名函数)
    var 变量名 = function(){…};
    函数调用必须写到函数体下面
  • new Function()(该方法效率低,比较少用)
    var fn = new Function(‘参数1’,‘参数2’…, ‘函数体’)
    Function 里面参数都必须是字符串格式
arguments(伪数组)的使用

arguments实际上它是当前函 数的一个内置对象。所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参。
:具有 length 属性,不具有数组的 push , pop 等方法

函数的调用
  • 普通函数(直接调用):fn();
  • 对象的方法 :对象名.sayHi();
  • 构造函数:new 函数名();
this
  • 函数内部this的指向
    • 普通函数调用:window
    • 对象方法调用:该方法所属对象
    • 构造函数调用:实例对象
改变函数内部this指向
  • call()方法 可调用函数,返回值为函数的返回值:call(this值,参数)
  • apply()方法 可调用函数,返回值为函数的返回值:apply(this值,[数组])
  • bind()方法 不会调用函数,返回由指定的 this 值和初始化参数改造的原函数拷贝 :bind(this值,参数)
高阶函数

高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出

闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。
闭包的作用:延伸变量的作用范围。

递归

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值