版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Donspeng/article/details/77113524
1、defer vs async
相同点:异步加载js文件
不同点:
defer:在DOM文档完全加载完成后加载,顺序加载
async:当前脚本不必等待其他脚本,也不必阻塞文档呈现,不按顺序加载
2、基本概念
1)大小写敏感
2)驼峰命名法
3)'use strict'严格模式,可以在文档顶部,也可以在函数内部,相当于一个编译指示
4)声明未赋值的变量会自动复制为undefined,未声明的error
5)null表示空指针对象
console.log(null==undefined) true
因为undefined派生自null
6)Boolean();将其他类型显式转化为boolean
var n=1;
var mes=Boolean(n);
console.log( typeof mes); //boolean
7)Number
Number.MIN_VALUE
Number.MAX_VALUE
由于保存浮点数需要整数两倍的空间,所以一般会转换为整数保存
var a=0.1;
var b=0.2;
if(a+b==0.3){
console.log('hah'); //并不会输出
}
8)数值转换
Number
parseInt
parseFloat
Number("sdfjdslkf") NaN
9)字符串转换
toString
10)对象类型Object
constructor
hasOwnProperty
isPrototypeof(object)
valueof()
toString()
toLocalString()
11)label语句
通常配合循环语句使用
12)arguments是一个对象,不是数组
js没有重载,通过arguments实现类似重载
13)js函数参数是按照值传递的,不论对象还是基本类型,基本类型是直接赋值,对象也是传值,不过传的是内存地址,也是值啊。。。。。。。。。
14)js没有块级作用域,具有函数作用域,变量提升会跳出函数作用域
function s(){
m='2';
}
//s(); 如果没有这行,m提示错误,并不会产生变量提升,因为此时函数s的作用域无效
**每个函数都有自己的执行环境,当执行流进入一个函数的时候,函数环境就会被推入一个环境栈中,而在执行之后,栈将其环境弹出,返回之前的执行环境,最大的执行环境就是windows对象**
console.log(m);
15)垃圾回收机制
标记清除:进入执行环境标记
引用计数:引用一次计数一次(逐渐被弃用)
16)推荐使用字面量的方式创建数组和对象
var a={};
var b=[];
因为通过字面量创建不会调用构造函数Object和Array
17)数组的length不是只读的,可以通过改变数组的长度来进行删除或者添加项
18)判断是数组的方法
instanceof:假定只有一个作用域,如果存在不同版本的Array创建方法,就会出问题
Array.isArray()
19)toString toLocalString valueOf
var a=[1,2,3];
console.log(a.toLocaleString()); //返回的是以,分割的字符串
console.log(a.toString()); //返回的是以,分割的字符串
console.log(a.valueOf()); //返回数组
console.log(a.join('|')); //如果数组某一项为空,则以空格字符显示
20)数组的栈方法和队列方法
数组可以看作栈或者队列
栈:后进先出
push:放入新的一项
pop:取出最新的一项
队列:先进先出
push:放入新的一项
shift:取出第一项
也可以使用unshift和pop从相反的方向模拟队列取决于你把数组的头部当作队列的头部或者尾部了。。。。。
21)数组的sort和reverse方法
sort:对数组进行排序,但是是通过比较每一项的toString进行比较的,如果比较数字,需要传入比较函数
reverse:反转数组
22)数组操作元素的方法:concat、slice、splice
concat:连接数组,返回一个新数组
slice:返回一个新数组,接受两个参数
slice(from,to=结尾)
如果传入的是负数,就用数组的长度和负数相加
splice:改变原来数组
删除 :splice(删除第一项的位置,删除项数)
插入:splice(起始位置,0,插入的项)
替换:splice(起始位置,删除的项,插入的项)
23)位置方法
indexOf:从前向后找
lastIndexOf:从后向前找
返回查找的项在数组中的位置,否则返回-1,内部使用‘===‘判断
24)数组的迭代方法
every:数组中的每一项执行函数,全为true,则返回true
some:数组中的每一项执行函数,有为true,则返回true
filter:返回满足函数为true的数组
map:返回数组,可以对元素进行操作
foreach:无返回值
25)归并函数redece和reduceRight
接受四个参数:(pre,cur,index,array)
26)Date
var d=new Date();
var s=Date.parse("某种格式的字符串");
27)正则表达式
字面量:var expression=/pattern/flag
flag:
g:全局模式,应用于所有字符串
i:不区分大小悉
m:多行模式
pattern:
所有元字符都必须进行转义
([{\^$|)?*+.]}
使用RegExp函数:
var patter=new RegExp(pattern,flag);
exec方法:捕获符合模式的字符串,返回一个数组
每次返回一个数据啦,设置全局每次执行会继续向后搜索,不设置,每次返回第一个
test方法:测试有没有符合特定字符串的方法
28)函数是对象,函数名是指针
29)函数内部的arguements对象和callee对象
callee对象指向具有arguments对象的函数,通常会用来实现递归调用;严格模式下调用会出错
30)prototype是不可枚举的,使用for in 不可发现
31)function具有length属性,用于描述传入参数的个数
32)基本包装类型:Boolean,String,Number
var s='1123';
s.substring(2);
按道理说,s是基本类型,不具有方法属性的,但是可以调用相应的方法,是js自动做了一层处理,
1)创建String类型的一个实例
2)在实例上调用制定的方法
3)销毁这个实例
所以包装类型,只会存在一瞬间。。。。。。
Object构造函数会像工厂方法一样,根据传入值的类型,返回相应的包装类型的实例
33)字符串的操作基本和数组的操作差不多。。。。。
trim():去掉前后多余的空格
34)URI编码方法
encodeURI:除了空格原封不动
encodeURIComponent:对非标准字符进行编码
35)Math方法
math.floor:
math.round:
math.ceil:
math.min:
math.max:
math.random:
36) 未完待续