基础知识点

js历史

是基于事件和对象驱动的解释性,松散型的语言

解释性:由浏览器解释执行

松散型:变量可以用来保存任何类型的数据

  • 布兰登艾奇
  • 引入方式
    • 外链js
    • 内嵌js
    • 重定向
  • 测试方式
    • alert()
    • console.log()
    • document.write()
  • 组成部分
    • ECMAscript ,基础语法
    • BOM 浏览器对象模型
    • DOM 文档对象模型
  • 作用
    • 写网页的动态效果
    • 写网页的游戏
    • 使用cookie、sessicon
    • 实现交互
    • 发送表单form
    • 发送ajax
    • ......

ECMAscript

变量 值和址

就是计算机内存里的一块地址单元,为了存储数据

  • 变量的定义
    • var let const
 var nub,nub1;
 nub=200;

 var nub=200,nub1='123';
 
 const PI=3.14;
 const arr = [1]
 arr.push('1')
  • 命名方式
    • 可以用数字、字母、下划线、$ 构成 ,不能以数字开头
    • 不能是关键字或保留字
    • 可以用首字母大写,或驼峰命名法来命名
    • 严格区分大小写
    • 命名要有意义
  • 存储
    • 存储在栈区
    • 可以存储任何的数据类型

数据类型

根据存储位置不同来划分

基础数据类型的值一般存储在栈区 传值

引用数据类型的值一般存储在堆区,地址(引用) 存储在栈区 传址

基础数据类型:

Number    string    boolean      null     undefind     symbol
基础数据类型 name 描述
Number 数值类型 (0B/0b十六进制 0o/0O八进制 0x/0X二进制) NaN(not a number)
string 字符串类型 "" '' `` 转义序列 \n(换行符) \f(换页符) \t(制表符) \r(回车符) \b(退格) \v(垂直制表符)
boolean 布尔类型 true false
null 空对象 占位符空
undefind 未定义
symbol 表示不重复的值

undefined

undefined == null //true

  • 一个变量,只声明,不赋值,默认值就是undefined
  • 一个对象,没有某个属性,这个属性就是undefined
  • 数组某个位置没有值,也是undefined
  • 函数的参数不传值,默认传undefined
  • 函数返回值,默认返回undefined
  • 引用类型
    • 数组 array
    • 函数 function
    • 对象 object
typeof      //number   string     boolean     object    function

instanceof    检测某一个对象是否是某一个构造函数的实例   一般用于检测引用类型    例如://Array

`` 模板字符串

var nub1 = 5
var nub2 = 40
console.log(`我们班${nub1 + nub2} 人,男生${nub2}人`)
console.log('我们班'+ (nub1 + nub2) + "人,男生" + nub2 + '人')

运算符

运算符 符号 描述
算数运算符 + - * / % + 字符串相加表示连接,相加后变成字符串 % 不对小数取余数 ++ -- 分先后
逻辑运算符 && || ! '' 、 0 、 null、 undefined、 false、 NaN => false
比较运算符 > < >= <= == != === !== 字符串进行比较的时候,比较ascii码值大小
一元运算符 -- ++
三元运算符 boolen_expression ? true_value : false-value 根本目的:赋值;满足条件赋值
特殊运算符 new / delete / typeof 创建对象 / 删除对象的属性 / 判断类型
赋值运算符 -= += *= /= %=
扩展运算符 ...
  • 算术运算符
    • + 字符串相加表示连接,相加后变成字符串
    • % 不对小数取余数
    • ++ -- 分先后,+在前和在后不同,如果存在赋值的情况,+在前,先+,后赋值,反之相反。但是不论是在前还是在后,这个运算的变量结果都会+1
  // Number()  不能转换undefined   // NaN
  // 调用 Number()顶层函数进行隐式转换   
  console.log(true + false)   // 1
  console.log(null + 1)  // 1
  console.log(undefined + 1) // NaN
  • 逻辑运算符 结果不一定是boolean类型值,只要运算停留在什么位置,结果就是什么。 但是&& ,要求运算两边都得满足,|| 两边只要满足一个就行。只要这个运算能够计算出结果,立即停止运行。
* &&
* ||
* !    非(!)运算结果一定是boolean类型值
  true && 1   // 1
  true || 1   // true
  null && false // null
  1 && 2    // 2
  
  !!1   //  boolean() 函数
  

  • 比较运算符
    • 字符串进行比较的时候,比较ascii码值大小
    • undefined==null 为真
    • == === 全等需要比较类型
console.log('abc' == 'acb')    // false
console.log(true > 1)   // false
console.log(true == 1)   // true
console.log(true === 1)    // false   ===  检测类型
  • 特殊运算符 三元

    • 特殊运算符

      • new 用来创建对象
      • delete 用来删除对象的属性
      • typeof 用来检测基础数据类型
    • 三元 (赋值——有条件的赋值)

      • var a=表达式? a:b 主要用来赋值

        var nub = 3 ? new Array() : new Object()
        console.log(nub)     // []
        
        var nub = document.body.scrollTop ? document.body : document.documentElement
        
    • instanceof 用来检测某个对象是否是某个构造函数的实例 比如用来检测Array

ASCII 美国标准信息交换码 EASCII 欧洲标准 gb2312 国标 =>> gbk(微软)(扩展【繁体字、少数民族字】)

uncode(通用) 传输方式(utf-8)

0 48 a 97 A 65 上 回车

流程控制

当满足某个条件的时候,按照一定顺序执行的代码

  • 顺序结构
  • 条件结构
    • if

    • switch 通常用来判断单个值 枚举

      var nub = 1
      switch (nub) {
            case 1: 
                console.log(1)
                console.log(1)
                console.log(1)
                console.log(1)
             break;
            case 2:
                console.log(2)
                console.log(2)
                console.log(2)
             break;
            default : ;
      }              // 1 1 1 1
      

  • 循环结构
    • for

    • while

      var arr = []
      while(arr.length < 20) {
        arr.push(1)       //隐式的步径值
      }
      
    • do while

   ```js
  var arr = []
  do() {
    arr.push(1)       //隐式的步径值
  } while(arr.length < 0)   // arr = [1]
   ```

数组

数组就是一系列有直接或者间接联系的数据的集合

  • 声明方式

    • var arr=[];
    • var arr=new Array();
  • 访问方式和设置方式

    • arr[1]
    • arr[1]=123;
    • arr['1']
    • arr['length']
    • arr.length
  • 数组遍历

    • for
    • foreach
    • for in
  • 二维数组

    一维数组的值都是数组的时候

    循环遍历 for for

var arr = ['a']
console.log(arr['length'])
console.log(arr.length)

// 数据的length属性很有特点——它不是只读的。可以通过设置这个属性,从数组的末尾移除项或向数组中添加新项

//js可以使用方括号表示法来访问对象的属性。
//在使用方括号语法时,应该将要访问的属性以 【字符串的形式】 放在方括号中

//使用方括号语法的主要优点是可以通过变量来访问属性                  

两个数组链接
return [...arr1,...arr2]

函数

将实现某一特定功能的代码块,封装起来,以便重复使用

  • 函数的定义

    • function // 关键字定义function的方式
    • var fun=function(){} 字面量(匿名函数赋给变量)
    • var fun=new Function(){} 不常用
  • 函数的调用 (一个函数如果不调用,那么永远也不会执行)

    • 函数名字或者是变量名字() fun()
    • 匿名函数的自运行 (function(){})()
  • 函数的参数

    函数的参数相当于一个局部变量,可以接受任何类型的值,不论是引用数据类型还是基础数据类型

    • 形式参数和实际参数 函数在定义时候的参数,函数在运行时的参数
    • 形式参数和实际参数的个数可以不相同,如果一个形式参数没有被传参,默认传递undefined,如果一个实际参数,没有相应的形式参数接收 ,我们可以使用arguments ,会默认的接受所有传递的实际参数。
    • 函数的形式参数可以接受任何类型的数据,不论是引用类型还是基础数据类型
    • 函数的形式参数其实相当于定义的局部变量
    • 函数的参数就是封装的接口
function fun() {
  consloe.log(arguments[0])  //
}
var nub1 = 200
var nub2 = 300
fun(nub1, nub2)
    function fun(nub1, nub2 = '123') {
      console.log(nub2)  //null
    }
    var nub1 = 200
    var nub2 = 300
    fun(nub1, null)

    function fun(nub1, nub2 = '123') {
      console.log(nub2)  //'123'
    }
    var nub1 = 200
    var nub2 = 300
    fun(nub1, undifined)
  • 函数的返回值
    • 任何一个函数,在运行结束后,都会返回一个值,默认是undefined
    • 函数只能有一个返回值,但是可以有多条返回语句
    • 函数一旦返回,立即停止运行
    • fun() 这是一个表达式,表达式的值是函数的返回值
    • 函数什么时候需要返回?当我们需要用到内部的局部变量的时候,我们可以将这个变量的值返回、或者终止函数运行。
var sum=function(a,b){
    var he=a+b;
    return he;
}
var num=sum(1,2); 
console.log(num)   //3
  • 函数的作用域和作用域链

作用域指的是变量或者是函数在某个范围内有意义。

当一个函数嵌套另外一个函数,作用域发生嵌套,就会形成作用域链 。
在一个函数运行时候,会自动的创建一个集合,用来保存可见范围内所有的变量或者是对象。这个集合就是作用域链。

作用域 环境 描述
全局环境 window 定义在全局环境中变量、函数,称为全局变量、全局函数
局部环境 函数 定义在局部环境中的变量、函数,称为局部变量、局部函数
块级作用域
  • 环境
    • 宿主环境 (浏览器)
    • 运行环境
      • 全局环境 window 全局变量
      • 局部环境 函数环境 局部变量
      • 块级作用域
  • 全局变量 拥有全局的作用域 在任何位置都可以访问到 在window里面都有意义
  • 局部变量 拥有局部的作用域,只能在当前环境中访问 只在当前的函数环境中有意义
var nub=200;
function fun(){
    var nub=300;
    console.log();
}
fun();
console.log(nub);
  • 预解析

在程序开始运行之前,js会将以var 声明的变量和以function关键字声明的函数,提前解析到相应的环境中。

预解析是分块解析的,但是所有的script标签对又是一个整体,已经加载的script里面的内容,可以在后面的script里面访问

console.log(nub);
var nub=200;
console.log(nub);
  • javascript 垃圾处理

    找出那些不再使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作。

    • 当函数运行完毕之后,内部的局部变量会立即被清除
    • 当一个对象,不再被引用的时候,会在某一个时刻被删除
    • 垃圾的收集方式:

    标记清除:(常见)

    垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记(当然,可以使用任何标记方式)。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的空间

    引用计数:(不常见)

    跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数加1。相反,如果包含这个值引用的变量又取得另外一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾收集器下次再运行时,他就会释放那些引用次数为0的值所占用的内存

  • 闭包

当一个函数嵌套另外一个函数,在内部函数中用到了外部函数的局部变量,在函数外部去访问内部函数的时候,就形成了闭包

function aa(){
    var nub=200;
    function bb(){
         console.log(nub);
    }
    return bb;
}
var fun=aa();
  fun()  //  200 

// 按照垃圾处理,aa运行结束的时候,内部的200应该是被清除。但是这是时候,将bb函数返回,在外部调用的时候,会用到nub这个局部变量,js会将这个变量保留下来。
  
  • 匿名函数自运行
(function () {
    alert(1);
})()
  • 回调函数

当函数的参数传递是函数的时候,这个函数就是回调函数 //当一个函数作为另一个函数参数的时候

function fun(a, b, fn) {
    fn(a, b)
}
fun(1, 3, function () {
    console.log(a * b)
})      // 3
  • 递归函数

当一个函数自己调用自己的时候,就形成了递归

// 阶乘  5!  n!
function jie(n) {
  if (n == 0) {
    return = 1
  }
  return n * jie(n - 1)
}

// 费波那契  1 2 3 5 8 13 ... n
function fei() {
  if (n == 1) {
    return 1
  }
  if (n == 2){
    return 2
  }
  return fei(n - 1) + fei(n - 2)
}
// 深拷贝和浅拷贝
// var arr=[[1,[]],[1,2],["a","b"]]
  • 箭头函数

    var arr = []
    var result = arr.map (value => value + 'new')
    
  • 内置顶层函数

Nubmer() String() Boolean() parseInt() parsefloat()

// 做算术运算隐式调用Number函数
console.log(1 - true)  //0
console.log(1 - undefined)  //NaN
console.log(1 - null)   //1


// 做比较运算隐式调用Number函数
console.log(1 > true)  //false
console.log(null == undefined) //true     特殊情况
console.log(null == false) //false      特殊情况

// 做布尔运算隐式调用Boolean函数

对象

人们研究的一切事物都可以称之为对象

类和对象

将一些具有某些特性的对象的特征抽象起来就形成类
类也可以作为对象 的判别,也可以用来创建对象

类是对象的抽象 对象是类的实例化

  • 对象的创建

    • var obj={}

      //以json格式去创建对象
      var obj = {
          name: 'lisi',
          age: 23,
          fun: function () {
              alert(1)
          }
      }
      obj.weight = '70kg'
      var str = 'name'
      console.log(obj)
      
    • var obj=new 构造函数()

      //构造函数提供对象的初始化
      function Person(name, age) {
          this.name = name;
          this.age = age
      }
      
    • var obj= new Object()

  • new 发生了三件事情

1.创建一个空对象  obj
2.让obj._proto_ == Person.prototype
3.Person.call(obj)
  • 对象的属性和方法
    • 对象的一些特征,抽象之后,我们叫做属性
    • 如果这个属性的值是一个函数,我们叫做方法
var obj={
    name:'lisi',
    age:123,
    fun:function(){
        
    }
}
console.log(obj.name)
console.log(obj['name'])
obj.index=1;
obj['index']=1;
obj.fun();

  • 构造函数和普通函数区别
    • 构造函数是为了提供对象的初始化
    • 构造函数一般不用定义返回值
    • 构造函数内部会使用this
    • 都是new 构造函数
  • 继承
    主要是在实例化也是new 的时候
    obj.proto=构造函数.prototype
 var obj=new person();
 person.prototype={
     aa:function(){
     }
 }
 每个对象都有__prototype__ 属性    每个函数都有prototype属性   
  • 对象的分类

    • 宿主对象
    • 内置对象
  • call()和apply()

    每个函数都有call()和apply()方法

  • this

    谁调用this就指向谁

数组方法

pop,push,reverse,shift,sort,splice,unshift 会改变原数组

join,concat,indexOf,lastIndexOf,slice,toString 不会改变原数组

map,filter,some,every,reduce,forEach这些迭代方法不会改变原数组

数组方法 作用
push()* 在数组后端添加任意个项并返回新数组的长度 var arr = [1,4,3] result = arr.push('a', 'b') console.log(arr, result) // [1, 4, 3, "a", "b"] 5
pop()* 移除数组中最后一项并返回该项 var arr = [1,4,3] result = arr.pop() console.log(arr, result) // [1, 4] 3
shift()* 移除数组中第一个项并返回该项 var arr = [1,4,3] result = arr.shift() console.log(arr, result) // [ 4, 3] 1
unshift()* 在数组前端添加任意个项并返回新数组的长度 var arr = [1,4,3] result = arr.unshift('a', 'b') console.log(arr, result) // ["a", "b", 1, 4, 3] 5
join() 只接受一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串(默认,连接) var arr = [1,4,3] result = arr.join('&') || arr.join('') console.log(arr, result) // [1, 4, 3] "1&4&3" || "143"
concat() 先创建当前数组的一个副本,然后将接收到的参数添加到副本末尾,最后返回新构建的数组 var arr = [1,4,3] result = arr.concat('a', 'b') console.log(arr, result) // [1, 4, 3] [1, 4, 3, "a", "b"]
splice()* 从数组中删除、添加项目,然后返回被删除的项目arr.splice(index,num,item1,..,itemX) var arr = [1,4,3] result = arr.splice(1,1,'a','b') console.log(arr, result) // [1, "a", "b", 3] [4]
slice() 从已有的数组中返回选定的元素。接受一个或两个参数,即要起始位置和结束位置,不影响原数组 arr.slice(index1,index2) var arr = [1,4,3] result = arr.slice(0,2) console.log(arr, result) // [1, 4, 3] [1, 4]
sort()* 按升序排列数组项 var arr = [1,4,3] result = arr.sort() console.log(arr, result) // [1, 3, 4] [1, 3, 4]
reverse()* 反转数组项的顺序 var arr = [1,4,3] result = arr.reverse() console.log(arr, result) // [3, 4, 1] [3, 4, 1]
includes() 判断一个数组是否包含一个指定的值,如果是,酌情返回true或false var arr = [1,4,3] result = arr.includes(1) console.log(arr, result) // [1, 4, 3] true
find() findeIndex() filter() forEach() map() every() some()
undefined -1 [] undefined [undefined] false/true true/false
find() 返回数组中满足提供测试函数的第一个元素的值。否则返回undefined var arr = [1,3,5,7,8] var result = arr.find(value => value > 5) console.log(arr, result) // [1, 3, 5, 7, 8] 7
findIndex() 返回数组中满足提供测试函数的第一个元素的索引。否则返回-1 var arr = [1,3,5,7,8] var result = arr.findIndex(value => value > 6) console.log(arr, result) // [1, 3, 5, 7, 8] 3
filter() 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组 var arr = [1,3,5,7,8] var result = arr.filter(value => value > 4) console.log(arr, result) // [1, 3, 5, 7, 8] [ 5 , 7, 8]
forEach() 对数组中的每一项运行给定函数,这个方法没有返回值 主要用来遍历数组 var arr = [1,3,5,7,8] var result = arr.forEach(value => value) console.log(arr, result) // [1, 3, 5, 7, 8] undefined
map() //映射 返回什么样的值,形成什么样的集合 var arr = [1,3,5,7,8] var result = arr.map(value => value*2) console.log(arr, result) // [1, 3, 5, 7, 8] [2, 6, 10, 14, 16]
some() 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true var arr = [1,3,5,7,8] var result = arr.some(value => value > 7) console.log(arr, result) // [1, 3, 5, 7, 8] true
every() 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true var arr = [1,3,5,7,8] var result = arr.every(value => value > 3) console.log(arr, result) // [1, 3, 5, 7, 8] false

字符串

字符串方法 描述 例子
charAt() 以单字符字符串的形式返回给指定位置的那个字符 var str = 'hello world' var result = str.charAt(1) //e
charCodeAt() 返回给指定位置的那个字符的字符编码 var str = 'hello world' var result = str.charCodeAt(1) //101
fromCharCode() 接收一个或多个字符编码,然后将它们转化成一个字符串 var result = String.fromCharCode(104, 101, 108, 108, 111) console.log(result) //hello
concat() 用于将一个或多个字符串拼接起来,返回拼接的到的新字符串,不改变原先的字符串的值 可以接受任意多的参数 var str = 'hello ' var result = str.concat('world',’!‘) console.log(str, result) //hello hello world!
replace() 接受两个参数,第一个参数可以是RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数。如果第一个参数是字符串,那么只会替换第一个子字符串 var arr = 'hello world' var brr = arr.replace('he','ll') console.log(arr, brr) //llllo world
split() 这个方法可以基于指定的分隔符将一个字符串分割成多个字符串,并将结果放在一个数组中 var str = 'red, blue, green' var result = str.split(',', 2) console.log(str, result) //red, blue, green ["red", " blue"]
substr() 返回一个字符串中从指定位置开始到指定字符数的字符 var str = "abcdefghij"; console.log("(1,2): " + str.substr(1,2)); // (1,2): bc console.log("(1): " + str.substr(1)); // (1): bcdefghij
substring() 返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集 var anyString = "Mozilla"; console.log(anyString.substring(0,3)); console.log(anyString.substring(3,0)); // 输出 "Moz"
indexOf() 从一个字符串中开头向后搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1)可接受第二个参数,表示从字符串的哪个位置开始向后搜索 var str = 'hello ' var result = str.indexOf('e') console.log(str, result) // hello 1
lastIndexOf() 从一个字符串中末尾向前搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1)可接受第二个参数,表示从字符串的哪个位置开始向前搜索 var str = 'helloe ' var result = str.lastIndexOf('e') console.log(str, result) //helloe 5
slice() 提取字符串的一部分,并返回一新的字符串 var str1 = 'The morning is upon us.'; var str2 = str1.slice(4, -2); console.log(str2); // morning is upon u
startsWith() 用来判断当前字符串是否是以另外一个给定的子字符串“开头”的,根据判断结果返回 true 或 false。 var str = "To be, or not to be, that is the question."; alert(str.startsWith("To be")); // true alert(str.startsWith("not to be")); // false alert(str.startsWith("not to be", 10)); // true
endsWith() 用来判断当前字符串是否是以另外一个给定的子字符串“结尾”的,根据判断结果返回 true 或 false var str = "To be, or not to be, that is the question."; alert( str.endsWith("question.") ); // true alert( str.endsWith("to be") ); // false alert( str.endsWith("to be", 19) ); // true alert( str.endsWith("To be", 5) ); // true
includes() includes() 方法用于判断一个字符串是否包含在另一个字符串中,根据情况返回true或false var str = 'To be, or not to be, that is the question.'; console.log(str.includes('To be')); // true console.log(str.includes('To be', 1)); // false
toLowerCase() 字符串转化为小写 var str = 'Hello ' var result = str.toLowerCase() console.log(str, result) //Hello hello
toUpperCase() 字符串转化为大写 var str='Hello ' var result = str.toUpperCase() console.log(str, result) //Hello HELLO
trim 创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果 var str = 'hello ' var result = str.trim() console.log(str, result) //hello hello
trimLeft 从一个字符串的左端移除空白字符。
trimRight 从一个字符串的右端移除空白字符

Math

Math方法 描述 例子
Math.abs(num) 返回num的绝对值 只处理第一个参数 var result = Math.abs(-1) // 1
Math.max() 确定一组数值中的最大值,可以接受任意多的数值参数 var result = Math.min(-1,3,2) //-1
Math.min() 确定一组数值中的最小值,可以接受任意多的数值参数 var result = Math.min(-1,3,2) //3
Math.ceil() 执行向上舍入,即它总是将数值向上舍入为最接近的整数 只处理第一个参数 var result = Math.ceil(3.4) //4
Math.floor() 执行向下舍入,即它总是将数值向下舍入为最接近的整数 只处理第一个参数 var result = Math.floor(3.6) //3
Math.round() 执行标准舍入,即它总是将数值四舍五入为最接近的整数 只处理第一个参数 var result = Math.round(3.5) //4
Math.random() 返回大于0小于1的一个随机数 不加参数 有参数没用 var result = Math.random() //0.5254465176488599
Math.sin(x) 返回x的正弦值 var result = Math.sin(1) //0.8414709848078965
Math.cos(x) 返回x的余弦值 var result = Math.cos(1) 0.5403023058681398
Math.tan(x) 返回x的正切值 var result = Math.tan(1) 1.5574077246549023
Math.PI π的值 var result = Math.PI //3.141592653589793
Math.pow(num, power) 返回num的power次幂 var result = Math.pow(2,4) //16
Math.sqrt(num) 返回num的平方根 var result = Math.sqrt(4) //2

BOM

window属性和方法

  • window.screen.width // 屏幕宽度
  • window.screen.height // 屏幕高度
  • alert()
  • prompt()
  • top
  • 时间函数
    • setInterval
    • clearInterval()
    • setTimeout
    • clearTimeout()

location

  • protocol
  • hostname
  • port
  • search
  • hash
  • pathname
http: / https:(http加强版,比较安全)
//超文本传输协议

// 协议    主机名+端口号/主机名   端口号   路径 查询字符串  锚地址
location.protocol     location.host/location.hostname      location.port       location.pathname location.search   location.hash
  • location.href

    location.href = ("http://baidu.com") //跳转到某个页面
    
  • location.reload(true)

    location.reload(true)  //重新加载 所有数据
    
  • location.assign()

    location.assign('http://baidu.com') //跳转到某个页面
    
  • location.replace()

    location.replace('http://baidu.com')  //不会留下历史记录
    

history

  • length
  • back() // 上一个页面
  • forword() //下一个页面
  • go(n) // go(0) 刷新
http: 
https:(http加强版,比较安全)
超文本传输协议
网络传输协议

TCP/IP     7层协议      网络层    
www.aebabs.com:80(端口号)(path) index.html?查询     域名   主机地址

DOM

文档操作

获取设置文档信息

  • document.url
  • document.title

获取宽高

如果一个块元素如果不设置宽度,默认宽度是它父元素的宽度,默认高度是它内容的高度

  • window.screen.width //屏幕宽度

  • window.screen.height //屏幕高度

  • document.documentElement.clientWidth //获取浏览器窗口宽度

  • document.documentElement.clientHeight //获取浏览器窗口高度

  • ele.offsetWidth // 实际宽高 不包括margin

  • offsetHeight

  • offsetLeft

  • offsetTop

    计算的是距离有定位属性的上级元素的距离,如果没有定位属性的父元素,计算的是距离body的值

获取元素

  • document.getElementById()
  • obj.getElementsByClassName()
  • obj.getElementsByTagName()
  • document.getElementsByName()
  • obj.querySelector()
  • obj.querySelectorAll()

对于元素内容的操作

  • innerHTML
  • inenrText

对于元素属性的操作

获取属性

  • 标准属性 obj.src
  • getAttribute()

设置属性

  • setAttribute(key, value)
  • 非标准 get set
  • class obj.className
  • class obj.classList.add .remove .toggle

对于元素的样式操作

  • 获取

    • getComputedStyle(obj,null).属性 / obj.currentStyle.样式 IE
    • 行内样式 obj.style.属性
  • 添加

    • obj.style.css属性
    • obj.style.cssText
  • 通过类名或者是id名,属性名字进行设置

事件

事件冒泡

事件流

定义: 当一个事件触发的时候,当前元素的父元素乃至整个页面都会以一定的顺序来响应事件,响应的顺序叫做事件流

  • 冒泡型事件流

    从当前元素开始向上级进行冒泡触发

  • 捕获型事件流 (IE低版本没有)

    从根元素开始向当前元素进行触发

  • mouseenter mouseleave 事件没有事件冒泡4

  • 阻止事件流

    • e.stopPropagation() || e.returnValue = false [万恶的IE]
var par = document.querySelector('.par')
    var son = document.querySelector('.son')
    var body = document.querySelector('body')
    var html = document.querySelector('html')
    par.onclick = function () {
        console.log(1)
    }

    html.addEventListener('click', function () {
        console.log('html捕获')
    }, true)
    body.addEventListener('click', function () {
        console.log('body捕获')
    }, true)
    par.addEventListener('click', function () {
        console.log('par捕获')
    }, true)
    son.addEventListener('click', function () {
        console.log('son捕获')
    }, true)
    html.onclick = function () {
        console.log('html冒泡')
    }
    body.onclick = function () {
        console.log('body冒泡')
    }
    par.onclick = function () {
        console.log('par冒泡')
    }
    son.onclick = function (e) {
        // 阻止事件流
        if (e.stopPropagation) {
            e.stopPropagation()
            e.preventDefault()
        } else {
            e.cancelBubble = true;
            e.returnValue = false
        }
        console.log('son冒泡')
}
    //html捕获  body捕获   par捕获   son捕获  son冒泡

事件委托

利用事件冒泡,对以下几种情况进行处理

  1. 新添加进来的元素,需要事件的时候
  2. 做事件优化的时候
  3. 使用ajax的时候
<body>
    <button>按钮</button>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
</body>
var btn = document.querySelector('button')
btn.onclick = function () {
    var div = document.createElement('div')
    div.innerHTML = "new"
    document.body.appendChild(div)
}
// document.body.onclick = function () {
//  alert(1)
// }

// 目标事件源: 真正触发事件的元素
document.body.onclick = function (e) {
    var obj = e.target
    // console.log(obj)
    //判断
    if (obj.tagName == 'DIV') {
        obj.style.background = "blue"
    }
    // if (obj.nodeName == "DIV") {
    //  obj.style.background = "blue"
    // }
}

事件

文档节点

html文档中,所有的构成部分都是节点,每一个节点和节点之间的关系构成了整个html文档树模型

文档中的全部节点 类型 nodeName nodeType nodeValue
文档节点 document #document 9 null
文本节点 文本 #text 3 文本内容
元素节点 标签 'DIV' //('大写标签名') 1 null
注释节点 注释 #comment 8 注释内容
属性节点 属性 属性名 2 属性值

节点的操作

节点的创建

  • obj.createElement()

节点的增加

  • par.appendChild()
  • sib.insertBefore(newEle, oldEle)

节点的删除

  • par.removeChild(son)

节点的复制

  • obj.cloneNode(true) //true决定子元素是否被克隆

节点的替代

  • par.replaceChild(newEle, oldEle)

获取节点

获取父元素

  • son.parentNode //获取父节点
  • son.parentElement //获取父节点

获取父辈的子元素

  • childNodes; //获取所有的节点
  • div.children; //获取所有元素节点
  • par.firstChild; //获取第一个节点
  • par.lastChild; //获取最后一个节点
  • par.firstElementChild; //获取第一个元素节点
  • par.lastElementChild; //获取最后一个元素节点

获取同辈的相近元素

  • sib.previousSibling; //前一个节点
  • sib.previousElementSibling; //前一个元素节点
  • sib.nextSibling; //下一个节点
  • sib.nextElementSibling; //下一个元素节点
  • insertAfter(newobj,oldobj)
    function insertAfter(newobj,oldobj){
        var next=oldobj.nextSibling;
        if(next){
            oldobj.parentNode.insertBefore(newobj,next)
        }else{
            oldobj.parentNode.appendChild(newobj);
        }
    }

Ajax

html: 超文本标记语言

xhtml: 过渡 版本

xml: 可扩展标记语言

<clothes>
  <color>red</color>
</clothes>

版本控制工具

svn:集中式管理工具

git:分布式管理工具

git clone

git pull (多人协作)

将修改提交到暂存区

git add/*

将暂存区的文件更新到本地的仓库

git commit -m '更新说明'

将本地仓库和网络仓库进行合并同步

git push

语义化

img email url number 表单的属性

viedio

canvas 用js作图的技术,帮助我们快速渲染页面,降低

websokit

拖拽

formdata

filereader

变量 let

块级作用域

函数

赋值 结构赋值

运算符 扩展运算符

导入导出

获取元素的方式

方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容