JS基础知识

1.JS的组成

JS 由 ECMAScript, BOM, DOM组成

ECMAScript 是Javascript基础规范,定义了Javascript基础语法。
BOM 浏览器对象模型 可以对浏览器窗口进行访问和操作。
DOM 文档对象模型 通过创建树来表示文档,从而使开发者对文档的内容和结构具有控制力。

2.声明变量的几种方式

var , let ,const

var 存在变量提升

var 声明的变量 在声明之前打印,不会报错,但打印出来的是undefined

 声明之后没赋值不会报错,但是,打印出来是undefined

let 和 const 不存在变量提升

let 和const 不能在声明之前打印,打印之后会报错,这是因为暂时性死区的原因

 const声明的是常量,只有声明的基本数据类型的时候 不可改变,引用数据类型可以改变值

 3.JS有哪几种数据类型

JS有两种数据类型

第一种是 基本数据类型,第二种是 引用数据类型

两者的区别

存储的位置不同,基本数据类型存储于栈中,引用数据类型存储于堆中

基本数据类型有:Undefined,Null, Number,String,Boolean, ES6新增 Symbol BigInt

引用数据类型有:Object,Function,Array,Date,RegExp,ES6新增的map和set

4.什么是数组?

数组是由元素组成的有序的集合

声明数组的两种:

1. 字面量声明数组   

2. 构造函数声明

 数组有长度属性:代表着元素的个数

 数组取值 一定要使用 下标 从0开始的

 长度 和 下标  没有关系

5. 数组的操作方法

             七个内置的操作方法: 改变数组本身

                  push  -- 尾部添加 返回新数组的长度

                  pop  -- 尾部删除  返回的是被删除的元素

                  shift  -- 头部删除

                  unshift  --头部添加

                  sort -- 排序  返回排序后的数组

                   reverse  -- 数组反转

                  splice -- 增加 删除 修改;本质上是删除

                  splice(从哪里开始的下标,删除的长度,要替换的值)

2. 循环遍历数组

 forEach  -- 对数组进行循环遍历 

 filter -- 数组过滤  返回 所有符合条件的元素 一个新数组
 map -- 对数组的每一项进行操作,返回新数组
 
 some  -- 判断数组中是否有满足条件的元素 如果有返回true 没有 false
 every -- 判断数组中是否元素是否全部满足条件 如果是返回true 否则 false
 
 indexOf --  查找第一个符合条件的下标,查到不到返回-1
 lastIndexOf --  查找最后一个符合条件的下标,查到不到返回-1
 
 findIndex -- 查找第一个符合条件的下标,查到不到返回-1  
 find  -- 查找第一个符合条件的元素,查到不到返回undefined  
 
 includes -- 是否包含某个元素  如果包含 true;否则 false

3.伪数组

伪数组 / 类数组,和数组类似,有数组的长度属性,但是没有数组原型链上的操作方法
常见的伪数组 : arguments  nodeList

伪数组转化为数组方法有3种

var arr = Array.prototype.slice.call(arguments)

var arr = [].slice.call(arguments)

var arr = [...arguments]

5.什么是对象?

对象是一个无序的声明对象

1.声明对象的方式

1.字面量  
2.构造函数的

let obj = {} // 字面量
let obj1 = new Object()

  如果想声明一个没有原型链的对象  var obj = Object.create(null) 

2.对象的取值


两种取值方式: 1. 对象.属性名  2. 对象[]

对象的取值
两种取值方式: 1. 对象.属性名  2. 对象[]
let obj = {
	a: 1,
	b:2,
	key: 123
}
console.log(obj.b)
console.log(obj['b'])
var haha = 'b'

3.对象的循环遍历

常用的有两种

for in ,for of

for(let key in obj){
	console.log(key)
				
	console.log(obj[key])
}
for(let key of obj){
	console.log(key)
}

4. for in 和 for of的区别

都可以循环数组,for in 循环出来的是下标  for of循环出来的是元素
for in 可以循环对象  for of 不可以循环对象

 对象合并  Object.assign(目标对象,要合并的对象)

let obj = {
	name: '2111B'
}
// let obj1 = {a:1}
			
// Object.assign(obj,obj1)
			
Object.assign(obj,[1,2,3])
			

 6.函数

封装可重复执行的代码块

声明函数的方法:2种(常用的)

字面量声明,关键字声明

1.两种声明方式的区别:

字面量声明的函数属于匿名函数,在函数赋值之前是不能调用的

匿名函数不能作为构造函数使用

关键字声明的函数 声明前后都可以调用

字面量声明
	let fn = function(){
				
}
关键字声明
	function fn1(){
				
}

 function 比var 提升的高

 console.log(fn)
 var fn = 'hello world'
 // console.log(fn)
 function fn(){
 	console.log(1)
 }
 function fn(){
 	console.log(2)
 }
 console.log(fn)
 var a = 1
 var a
 console.log(a)

 2.函数的参数

形参 -- 形式上的参数   和  实参--实际的参数

3. 函数的返回值

 函数的返回值 使用 return  ;如果有函数有返回值,函数调用的时候会返回;如果没有,返回undefined , return 之后 代码不会在执行了

7.运算符

= 赋值  == 值是否相等   === 值  数据类型

8.作用域

 变量的可使用范围

 9.作用域链

当使用一个变量的时候,会首先在当前作用域查找,如果查找不到会继续向外一层作用域查找,直到查到为止;查不到报错 (就近原则)

 10.闭包

就是函数 嵌套函数

11.递归

function fn(){
				
}
fn()
let num = 0
for(var i =0;i<=10;i++){
	num+=i
}

12.时间戳

13.随机数(常用的)

Math.ceil()向上取整

Math.floor()向下取整

Math.abs()数字的绝对值

Math.random()大于或等于 0 且小于 1 的浮点伪随机数

Math.round()四舍五入到最接近整数的数值

Math.max()给出的最大数字

Math.min()给出的最小的数字

14.原生dom绑定事件

 一共有三种方法

  1. 行内绑定

  2. 选择到元素添加事件

  3. 添加事件监听

 15.ajax

                async javascript  and xml;实现局部刷新的一门技术

                在浏览器内有一个内置的核心对象 XMLHttpRequest

                要使用核心对象:

                1. 实例化核心对象

                2. 建立链接   xhr.open(请求方式,请求地址,同步异步)

// 1. 实例化核心对象
			let  xhr =  new XMLHttpRequest()
			// 2. 建立链接
			xhr.open('GET','https://api.it120.cc/small4/banner/list')
			
			// 3. 发送请求 (可携带参数)
			xhr.send()
			
			// 4. 获取请求的数据
			xhr.onreadystatechange = function(){
				if(xhr.readyState==4 && xhr.status==200){
					console.log(JSON.parse(xhr.response))
				}
			}
			

16.  时间戳

 从1970年1-1 0时0分0秒 到目前为止的总秒数 单位毫秒

 17.setTimeout和setInterval

setTimeout - 一段时间之后执行一次   setInterval 每隔一段时间之后执行一次

 延时的时间不写,大概是4ms

// setTimeout(()=>{
			console.log(1)
			 },1000)
			
			setInterval(()=>{
			console.log(2)
		},1000)
			

18.Vue指令

v-bind 动态绑定属性的  简写成 :

     v-on 绑定事件 简写成 @

     v-cloak 防止插值闪烁

  v-if 通过动态的 删除或者添加元素 来实现元素的显示和隐藏

     v-show

  都是控制元素的显示和隐藏的,v-if通过动态的 删除或者添加元素 来实现元素的显示和隐藏

        v-show是通过 css的display:none来隐藏元素

        v-html -- 会解析标签 (富文本)

        v-text  -- 不会解析标签

        v-pre  -- 跳过插值解析

        v-once -- 只渲染一次

        v-model--双向的数据绑定,form表单

        v-for -- 循环遍历

19.事件传播的流程 

事件捕获 (从大到小的过程)

 目标源

冒泡阶段 (从小到大的过程)

 20.事件委托

事件委托,又名事件代理。事件委托就是利用事件冒泡,就是把子元素的事件都绑定到父元素上。如果子元素阻止了事件冒泡,那么委托也就没法实现了

好处:提高性能,减少了事件绑定,从而减少内存占用 比如:瀑布流:无限上拉列表中,如果给每一个图片绑定点击事件,非常繁琐且消耗内存。所以我们可以把每张图片上的点击事件委托给共同的父元素。

21.字符串替换方法 

replace() 部分或所有匹配的 apattern替换为 a replacement

  

22.Vue methods/computed/watch 

1.computed 

计算属性,只依赖于所依赖 的值,只会存在他所依赖 的值发生改变的时候,才会改变

 不能直接修改计算属性的值,如果要修改,需要将计算属性写成对象形式

2.methods 

methods 只有调用的时候才会 触发 

23. this指向

this指向:谁调用指向谁

1. 全局中指向window

2. 构造函数中,this指向new出来的实例;比如说vue内的this都指向 vue的实例化

3. 箭头函数不会改变this指向;我通常在请求数据请求回来接受数据的时候,会写成箭头函数

4. 函数中 this指向最后调用的; 汗水在声明的时候是没有this指向的,只有在调用的时候才会有this指向并且谁最后调用指向谁

5. 原生dom点击事件内的this指向 点击的元素

6.当我写代码的时候,通常情况下,我直接 写一个  let vm = this;

24.强制性改变this指向:call  bind  apply 

区别 

1.call和 apply会直接调用函数,而bind不会调用函数,需要函数重新调用

2. 参数的区别:

.call(this的指向,参数1,参数2.....)

.apply(this指向,[参数1,参数2.....])

.bind(this指向)(参数1,参数2......)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值