Javascript总结

1.cookie

不能超过4kb,主要用途是保存登录信息

登录页面常使用cookie

设置cookic常用语法:document.cookie = ``;

max-age = 变量;设置cookie的保质期

2.localstorage(本地存储)格式跟临时存储一样

是HTML5中新加入的技术

除非被清除,否则永久保存

一般为5MB

仅在客户端(即浏览器)中保存,不参与和服务器的通信

本地存储使用的是key value数据结构

注意:value值只能是字符串 无法存储对象

本机持续化存储,没有过期时间

如果要存储对象要将对象转化为字符串

可使用JSON.stringify()将javascript对象转换为json字符串

清空存储的值:

localStorage.removeItem("key");

3.sessionstorage(临时存储)

临时存储使用的是key value数据结构

注意:value值只能是字符串 无法存储对象

如果要存储对象要将对象转化为字符串

可使用JSON.stringify()将javascript对象转换为json字符串

// 将对象转为字符串

let personString = JSON.stringify(person);

// 将字符串存储在sessionStorage中

sessionStorage.setItem("persons", personString);

// 获取值

let person = sessionStorage.getItem("persons");

4.onchange

当元素的值发生改变时,会发生onchange事件

对于单选框和复选框,在被选择的状态改变时,发生onchange事件

5.作用域链

  1. 只要是代码,就至少有一个作用域

  2. 写在函数内部的叫局部作用域

  3. 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域

  4. 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链

6.var与let的区别

在let出来之前,var的作用范围只有函数和全局作用域,在let后出现了块级作用域,

var:

1.使用var声明的函数、变量会造成变量提升,即在函数声明前也可访问该变量和函数,

2.用var声明的变量,{}限定不了var的访问范围,即在{}内声明的变量也可在{}外进行访问。

3.var变量可以重复声明

let:

1.let声明的变量只能在声明后才能被访问,否则会报Uncaught ReferenceError错误

2.let变量不能重复声明,let不允许在相同作用域内,重复声明同一个变量。否则报错:Uncaught SyntaxError: Identifier 'XXX' has already been declared

var与let在for循环中的区别

用var声明i

for (var i = 0; i <10; i++) {  
  setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。
    console.log(i);        // 执行此代码时,同步代码for循环已经执行完成
  }, 0);
}
// 输出结果
10   共10个
// 这里面的知识点: JS的事件循环机制,setTimeout的机制等

用let声明i

// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
  }, 0);
}
// 输出结果:
0  1  2  3  4  5  6  7  8 9

7.js的加载过程

JS加载时,首先会优先加载function,但仅限于function xxx(){}这种声明方式的,像var b = function(){};又或者匿名函数等是不会优先加载的(注意匿名函数是什么时候用,什么时候加载,和懒加载有得一拼),这是第一步。其次会加载script元素,按照script中的标签从上往下执行,当遇到错误时会返回,结束当前标签的执行,执行下一个script。

js引擎会把js里面所有的 var 还有 function 提升到当前作用域的最前面

普通函数在调用时可以放在任意位置,而匿名函数的调用必须写在声明之后

因为普通函数在浏览器加载js文件时会将函数的声明提到最前面,称为函数提升

8.arguments

用来获取函数中有多少个参数传递,arguments 实际上它是当前函数的一个内置对象。所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参

9.new关键字

new在执行时会做四件事

  1. 在内存中创建一个新的空对象。

  2. 让 this 指向这个新的对象。

  3. 执行构造函数里面的代码,给这个新对象添加属性和方法

  4. 返回这个新对象(所以构造函数里面不需要return)

10.改变元素内容

innerText:不识别html标签,去除空格和换行

innerHTML:识别html标签,保留空格和换行

11.自定义属性

获取自定义属性

element.getAttribute('属性');

设置自定义属性的值

element.setAttribute('属性','值');

移除属性

element.removeAttribute('属性');

12.操作节点

parentNode:返回某节点的父节点,如果没有父节点返回null

childNodes:返回包含指定节点的子节点,返回值包含了所有的子节点,包括元素节点、文本节点等

firstChild: 返回第一个子节点,找不到则返回null,也包含了所有的节点

lastChild: 返回最后一个子节点,找不到则返回null,同样,也是包含所有的节点

nextSibling`返回当前元素的下一个兄弟元素节点,找不到则返回null,同样,也是包含所有的节点

previousSibling`返回当前元素上一个兄弟元素节点,找不到则返回null,同样,也是包含所有的节点

13.窗口加载事件

onload是等页面内容完全加载完毕,再去执行处理函数

window.onload使用传统的注册事件方式,只能写一次,如果有多个,会以最后一个为准

如果使用addEventListeren则没有限制

  • load等页面内容全部加载完毕,包括页面dom元素,图片,flash,css等

  • DOMContentLoaded 是DOM加载完毕,不包含图片 flash css 等就可以执行,加载速度比load更快一些

14.调整窗口大小事件

onresize是调整窗口大小加载事件,当触发时就调用的处理函数

只要窗口大小发生像素变化,就会触发这个事件

15.获取窗口的宽高

window.innerWidth获取当前屏幕的宽

window.innerHight获取当前屏幕的高

16.定时器

1.setTimeout

用于设置一个定时器,该定时器在定时器到期后执行调用函数

clearTimeout()取消先前通过调用setTimeout建立的定时器

2.setInterval

重复调用一个函数,每隔这个时间,就去调用一次回调函数

clearInterval取消了先前通过调用setInterval()建立的定时器

17.同步和异步

同步:前一个任务结束后再执行后一个任务

异步:在做这件事的同时,你还可以处理其他事情

同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。

  1. 先执行执行栈中的同步任务

  2. 异步任务(回调函数)放入任务队列中

  3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

18.location

  • window 对象给我们提供了一个 location属性用于获取或者设置窗体的url,并且可以解析url。因为这个属性返回的是一个对象,所以我们将这个属性也称为 location 对象。

    location.reload()重新加载页面,相当于刷新按钮或者f5,如果参数为true,强制刷新ctrl+f5

19.原型

构造函数通过原型分配的函数是所有对象所共享的,这样就解决了内存浪费的问题

每一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有属性和方法,都会被构造函数所拥有

什么是原型?

一个对象,我们也称为prototype为原型对象

原型的作用是什么?

共享方法

之所以我们对象可以使用构造函数prototype 原型对象的属性和方法,就是因为对象有_proto_原型的存在。

原型链查找规则

当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性 如果没有就查找它的原型(也就是proto指向的prototype原型对象) 如果还没有就查找原型对象的原型(Object的原型对象) 依次类推一直找到Object为止(null) __ proto __对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

20.改变函数内部this指向

call apply bind 总结:

相同点

都可以改变函数内部的 this指向 区别点:

call和apply会调用函数,并且改变函数内部的this指向 call和apply传递的参数不一样,call 传递参数,apply 必须数组形式 bind不会调用函数,可以改变函数内部this指向 主要应用场景

call经常做继承 apply经常跟数组有关系,比如借助于数学对线实现数组最大值与最小值 bind不调用函数,但是还想改变this指向,比如改变定时器内部的this指向

21.闭包

闭包指有权访问另一个函数作用域中的变量的函数

简单理解:一个作用域可以访问另外一个函数内部的局部变量

闭包的作用

延伸变量的作用范围

22.正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等

22.1.正则表达式的创建

1.通过RegExp对象的构造函数创建

var 变量名 = new RegExp(/表达式/);

2.通过字面量创建

var 变量名 = /表达式/;
边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)
// 边界符 ^ $
var rg = /abc/;   //正则表达式里面不需要加引号,不管是数字型还是字符串型
// /abc/只要包含有abc这个字符串返回的都是true
console.log(rg.test('abc'));
console.log(rg.test('abcd'));
console.log(rg.test('aabcd'));

var reg = /^abc/;
console.log(reg.test('abc'));   //true
console.log(reg.test('abcd'));	// true
console.log(reg.test('aabcd')); // false

var reg1 = /^abc$/
// 以abc开头,以abc结尾,必须是abc

 

 

括号总结

  1. 大括号 量词符 里面面表示重复次数

  2. 中括号 字符集合 匹配方括号中的任意字符

  3. 小括号 表示优先级

// 中括号 字符集合 匹配方括号中的任意字符
var reg = /^[abc]$/;
// a || b || c
// 大括号 量词符 里面表示重复次数
var reg = /^abc{3}$/;   // 它只是让c 重复3次 abccc
// 小括号 表示优先级
var reg = /^(abc){3}$/;  //它是让 abc 重复3次

23.函数表达式

函数表达式(function expression)非常类似于函数声明(function statement)并且两者拥有几乎相同的语法。函数表达式与函数声明的最主要区别是函数名称(function name),在函数表达式中可省略它,从而创建匿名函数(anonymous functions)

24.this关键词指的是它所属的对象

  • 在方法中,this 指的是所有者对象。

  • 单独的情况下,this 指的是全局对象。

  • 在函数中,this 指的是全局对象。

  • 在函数中,严格模式下,this 是 undefined。

  • 在事件中,this 指的是接收事件的元素。

25.BOM和DOM之间的关系

文档对象模型 (DOM):处理网页内容的方法和接口 浏览器对象模型(BOM):与浏览器交互的方法和接口

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值