优雅降级VS渐进增强
(好像是css3出来之后火起来的,低版本的浏览器针对css3兼容性较差,而又不想放弃优秀的css3特效,就在高版本的浏览器使用css3,低版本保证基本的功能的实现)
优雅降级:一开始就构建完整的功能,比如(构建一个css3的应用),然后针对各大浏览器进行 hack,从而达到各个浏览器的兼容。
渐进增强:一开始就从低版本的浏览器进行页面和功能的构建,然后再针对高版本浏览器进行,效果,交互,功能的完善,从而达到用户更好的体验。
区别:优雅降级主要针对最新版的浏览器,而渐进增强更注重低版本浏览器可用性,再注重高版本的浏览器
split()和join()
spilit() 切割,返回数组的形式。join() 将数组转换成字符串的形式
隐式类型转换 != > + - == ===
强制类型转换
Boolean() 返回ture或false
Number() 解析成数字
String()解析成字符串
parseInt()可解析字符串,返回一个整数
parseFloat() 可解析字符串,返回一个浮点数
引用类型转换
toString() 可把一个逻辑值转换成字符串,并返回一个结果
valueOf()可返回Boolean对象的原始值
数组方法大全
join()把数组的元素组成一个字符串,只接受一个参数,默认是逗号
push()可以接受所有的元素,把元素放到数组最后,返回数组的长度
pop()数组末尾删除最后一位,减少数组的length值,返回删除的项
shift()删除原数组的第一项,返回删除的值,如果为空则为underfind
unshift()从数组第一项添加参数,返回数组的长度
sort()按升序排列,最小的值在第一项,最大的值在最后一项
reverse()反转数组的顺序
concat()创建一个数组副本,没有参数,返回原数组,有参数,把数组添加到副本末尾并返回
slice()可以接受一个或两个参数,起始坐标和结束坐标,返回选中的项
splice()可以实现删除,插入和替换
indexOf()从开头查找数组的项
lastIndexOf()从结尾向前查找数组的项
forEach()对数组遍历循环
map()将调用的数组的每个元素给指定的函数,并返回一个数组,包含数组的返回值
filter()过滤功能 返回满足过滤条件的数组
every() 判断数组中每一项是否满足条件,只有每一项都满足条件时,返回true
some()只要数组中有一项满足条件,就返回true
reduce()为每一个元素以次执行回调函数,不包括数组中被删除或从未被赋值的元素
reduceRight() 和reduce()是一样的,不同之处是从末尾开始执行的
Call和Apply的区别
Call和Apply可以手动设置this的指向。调用Call的对象必须是一个fuanction函数,call的第一个参数将会是function改变上下文后指向的对象,如果不传,将会默认是全局对象window,第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function调用call的方法会立即执行,与call方法的使用基本一致,但是只接收两个参数,其中第二个参数必须是一个数组或者类数组,这也是这两个方法很重要的一个区别。
闭包
1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
原型链
1.普通对象和函数对象
javascript万物皆对象,对象分为普通对象和函数对象
比如:new object() 为普通对象
比如:new Function() 为函数对象
2.构造函数
简单的说就是,实例的构造函数属性指向构造函数(constructor)
举例:function Preson(a,b){
this.a = a; this.b = b;
}
var person1 = new Preson('1','2');
console.log(person1.constructor == Preson);
3.原型对象
每一个对象都有__proto__属性,只有函数对象才有prototype属性
面对对象