定时器
setTimeout: 定时执行。设置一个时间,等待时间到达的时候只执行一次,
setInterval: 循环执行。设置一个时间间隔,每隔一段时间都会执行一次这个方法
使用clearTimeout()和clearInterval () 可以清除定时器。
console.log("A");
setTimeout(function(){
console.log("B");
},20) //20毫秒之后
console.log("C");
setTimeout(function(){
console.log("D");
},10) //10毫秒之后
//ACDB
变量
变量的名称须遵循如下3条规则
1.首字母必须是字母(大小写均可) 、下划线,或者美元符号 ($)(数字开头,非法。)
2.余下的字符可以是下划线、美元符号、任意字母或者数字字符。
3.变量名不能是关键字 (keyword) 或者保留字。
字符串
//1.字符串声明
let str = '12/34/5/6';
//2.index检索,判断一个字符串在不在某个字符串里面
let index1 = str.indexOf('1')
console.log(index1);//0
let index2 = str.indexOf('7')
console.log(index2);//-1
//3.截取字符串(第一个参数:从哪个下标开始截取;第二个参数;截取的长度)
let str2 = str.substr(3,3)
console.log(str2);
//4.修改字符串(第一个参数;要修改的字符串;第二个参数:修改后的字符串)
let str3 = str.replace('123','456')
console.log(str3);
//5.分割字符串
//这个函数返回的一定是一个数组
let array = str.split('/')
console.log(array);//['12', '34', '5', '6']
//6.大小写转换(只有英文才有大小写,中文不存在大小写)
console.log('ABCD'.toLocaleLowerCase());//abcd
console.log('abcd'.toLocaleUpperCase());//ABCD
console.log('中文不存在大小写'.toLocaleLowerCase);//ƒ toLocaleLowerCase() { [native code] }
字符串转化为数组
let a = 'abc';
let b = a.split("");
console.log(a);
console.log(b);//['a','b','c']
数组转化为字符串
let A = ['1','2','3'];
let B = A.join("");
console.log(A);//['1','2','3']
console.log(B);//123
console.log(typeof(B));//string
模板字符串(template string)
是增强版的字符串,用反引号`标识
它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量
//字符串新写法 加强版的引号
console.log('好好学习 \n 天天向上');//好好学习 天天向上
//内容中可以直接出现换行符
console.log(`好好学习 天天向上`);
//3.字符串中嵌入变量
let name = `大耳朵图图`;
let skill = `动耳神功`;
document.write(`${name}的主要技能是${skill}`)
多行字符串
用来提高代码的可读性
尤其是当你处理预定义好的较长字符串时,把这种字符串分成多行书写更有利于提高代码的可读性和可维护性
在一些语言中,多行字符串还可以用来做代码注释
大部分动态脚本语言都支持多行字符串;比如Python,Ruby,PHP
字符串相加
最容易理解也最常用的一种形式
优点:易理解,简单,可靠
缺点:并不是真正意义上的多行字符串;大量的+号看上去像满天星
let str1 = "I am " +
"dangerous";
console.log(str1);//I am dangerous
使用反斜线
优点:简单,高效
缺点:每一行\后必须不可以不可以有空格,否则之间脚本错误。同样不是真正意义上的多行字符串
let str2 = "I am\
dangerous";
console.log(str2);//I am dangerous
模板字符串
在真实的业务中将一个字符串变成多行
let str3 = `I
am
dangerous`;
console.log(str3);
大小写转换
console.log('ABCDEFG'.toLowerCase()); //abcdefg
console.log('abcdefg'.toUpperCase()); //ABCDEFG
forEach和map方法有什么区别?
forEach()方法不会返回执行结果,也就是说forEach()方法会修改原来的数组,但是没有返回值。
map()方法得到一个新的数组,是map方法修改数组后返回回来的新数组。
forEach应用场景: 用于遍历数组,相当于for循环另一种写法
语法: 数组.forEach( function(value,index,arr)[ // 算法 })
forEach必须提供一个参数
a.value:每次遍历到的数组元素
b.index:每次遍历到的数组的下标
c.arr:数组
d.forEach
every应用场景: 用于判断数组中是否所有元素都满足条件
注意点
a.every函数返回一个布尔类型值
// 需求: 判断数组中没有负数
let arr = [23,31,60,88,-50,90,108,260];
let arr1 = arr.every((item)=>{
return item > 0;
});
console.log(arr1); //false
GET请求: 可以理解为“取”的意思。用来获取数据,不对服务器的数据做任何的修改、新增、删除等操作。
POST请求: 可以理解为“贴”的意思。数据发送到服务器以创建或更新资源,侧重于更新数据PUT请求: 可以理解为“放”的意思。数据发送到服务器以创建或更新资源,侧重于创建数据。
DELETE请求:“删除”。删除指定的资源。
HEAD请求: HEAD方法与GET方法相同,也是从服务器获取信息。但服务器不会返回请求的实体数据,只会传回相应头可以用在很多并不真正需要资源的场合,避免传输body数据的浪费。
比如,想要检查一个文件是否存在,只要发个信息HEAD请求就可以了,没有必要用GET把整个文件都取下来PATCH(布丁)请求: 用于上传数据并更新“部分”资源。
HTTP状态码
1开头的状态码 (信息类)
100,接收的请求正在处理
2开头的状态码 (成功类)
200,服务器已成功处理了请求。
3开头的状态码 (重定向)
301,永久性重定向。302,临时重定向
4开头的状态码 (客户端错误)
400,错误请求,服务器不理解请求的语法。403,服务器拒绝请求。
5开头的状态码 (服务器错误)
500,服务器内部错误,无法完成请求。503,服务器停机维护,无法处理请求
内置模块fs
node提供了一个内置模块fs(filesystem),专门用来操作文件的
可以读取一个文件的内容,也可以把内容写入到一个文件
//导入模块
require('模块名')
// const fs = require('fs')(一般会定义一个变量名接收)
//读取文件
fs.readFile('文件的路径',(err,data) => {
//不管是读取成功,还是读取失败,都会调用这个回调函数。
//如果读取失败,err里就会有错误信息
//热锅读取成功,err为空,data里就会有读取的内容
})
//写入文件
fs.writeFile('文件的路径',写入的内容,err => {
//写入完成调用的回调函数
//如果成功err就为空,如果失败就有值
})
//追加文件内容
fs.appendFile('路径','要追加的内容',err => {
if(!err){
console.log('追加成功');
}
})
//拷贝文件
fs.copyFile('要拷贝的文件路径','目标文件的路径')
//删除文件
fs.unlink('文件路径',err => {
if(!err) {
console.log('删除成功');
}
})
同步操作和异步操作
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。而同步处理则与之相反,需要一件事完成之后才能走另外一件事,不能“分心”举例。异步处理-小明一边吃西瓜一边看电视;同步处理-小明吃完了西瓜再去看电视
题目:
如何理解同步和异步?
同步指两个进程的运行是相关的,一个进程要阻塞等待另外一个进程的运行2异步的意思是两个进程毫无相关。发送完一个请求,不必等待返回。
闭包(closure)
闭包是一种代码形式,内部函数访问外部函数的局部变量。
在JS中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁。
举例:js函数A里面有一个函数B,函数B访问了函数A里面定义的局部变量,此时就产生了闭包。
变量所在的函数就是闭包函数,这里A就是闭包函数。
// 外部函数
function outer(){
//外部函数中的局部变量
let n = 10
//内部函数
function inner(){
//内部函数访问外部函数的局部变量
console.log(n);
}
//将内部函数return出去,这样外部才可以调用
return inner
}
let fn = outer();
console.log(fn);
fn()
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在E中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
JSON
JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串
要实现JSON字符串转换为JS对象,使用JSON.parse()方法。
要实现JS对象转换为JSON字符串,使用JSON.stringify()方法。
Promise的基本用法
@Promise.resolve 方法:(value)=>(1)value: 成功的数据或 promise
说明:返回一个成功/失败的 ·promise 对象。
Promise.reject 方法:(reason)=>(1)reason: 失败的原因
说明:返压一个失败的 promise 对象。
AJAX
AJAX全称(Async Javascript and·XML),即异步的JavaScript 和XML,是一种创建交互式网页应用的网页开发技术
let xhr=-new XMLHttpRequest;
xhr.open("请求方式’,"请求地址’);
xhr.οnlοad=function()[请求成功后的回调函数};
xhr.send( )
对象
对象介绍
对象是什么:对象是一种复杂数据类型。
对象作用:以键值对方式存储多个数据。
对象和数组异同点
相同点:都是复杂数据类型,都可以存储多个数据。
不同点:存储方式不同。
数组:有序存储。
对象:无序存储(键值对)。
// 需求:存储一个人的信息(姓名,年龄,性别)
// 1.使用基本数据类型
let name ='班长'
let age = 18
let sex ='男'
// 好处:阅读性高
// 弊端:冗余
// 2.使用复杂数据类型-数组
let arr = ['班长',18,'男']
console.log(arr);
// 好处:一个变量存储多个数据
// 弊端:阅读性不高
// 3.使用对象
let obj = { name:'班长',age:38, sex:'男'}
对象语法
1.声明对象
let 对象名 = {
属性名:属性值,
属性名:属性值,
}
2.取值语法
对象名.属性名
对象遍历
遍历数组:for循环
for(let i = 0; i < arr.length; i++){ arr[i] }
2.遍历对象:特殊的for-in循环(专门用于遍历对象)
for(let key in 对象名){ 对象名 [key] }
let obj = {
name:'班长',
age:18,
sex:'男',
hobby:'学习'
}
for(let key in obj){
console.log(key);
console.log(obj[key]);
}
对象操作(增删改查)
let obj = {
name:'班长',
age:18,
sex:'男',
}
// 1.查询语法(属性名存在,获取属性值;属性名不存在,获取underfined)
// a.点语法 对象名.属性名
// b.[]语法 对象名['属性名']
// a.点语法 对象名.属性名
console.log(obj.name );//班长 console.log(obj.age );
//18 console.log(obj.sex );//男
console.log(obj.country);//undefined
// b.[]语法对象名['属性名']
console.log(obj['sex'] );//男
// 2.修改属性
// a.对象名.属性名 = 值
// b.对象名['属性名'] = 值
obj.name ='李四';
obj['age'] = 20;
console.log(obj);//{name:'李四',age: 20,sex:'男'}
// 3.新增属性
// a.如果对已经存在的属性赋值,则是修改
// b.如果对不存在的属性赋值,则是新增
obj.hobby ='学习'
console.log(obj);//{name:'李四",age:20,sex:"男',hobby:'学习'}
// 4.删除对象属性
// delete 对象名.属性名
delete obj.age
console.log(obj);//{name:'李四",sex:'男',hobby:'学习'}
Math对象
// 1.内置对象:属于object对象,由js作者提前写好的对象,里面存储了一些属性和方法,直接拿来使用即可
// 说人话:相当于手机内置应用,如短信、电话。一买来就自带,直接使用。
// 2.Math:数学对象
// Date:日期对象
// Function:函数对象
// RegExp:正则表达式
// Array:数组对象
// String:string对象
// Boolean:boolean对象
// Number:number对象
//1.圆周率
console.log(Math.PI);//3.141592653589793
//2.绝对值
console.log(Math.abs(-2));//2
//3.找最大值/最小值
console.log(Math.max(10,20,30,40,50)); //50
console.log(Math.min(10,20,30,40,50)); //10
//4.幂运算:Math.pow(x,y) 求x的y次方
console.log(Math.pow(2,3)); //8
//5.随机数 0-1随机小数
console.log(Math.random()*100);