引用类型
(一)Object类型:
1.使用[]的方法来访问对象属性,其中属性放在[]中必须时字符串的形式。
2.这样一来相比较与使用 . 的方式访问属性有个好处,就是当属性不规则时只能使用[],如: [‘is-default’]。也可以是变量。
(二)Array类型:
1.字面量创建数组,不建议在[]中结尾多些逗号。如:[1,2,1,3,].原因是他可能创建2项或者3项的一个数组。在IE8及之前的版本都是创建3项的数组,之后都是两项的数组。
2.确定一个对象是不是数组,采用Array.isArray()方法,支持情况:IE9+,及其他。
3.sort()方法,会隐式的调用数组每一项的toString()方法,然后比较的时字符串。没有例外。比较函数返回1(升序),比较函数返回-1(降序)
4.es6迭代方法:(以下操作都不会修改原数组)
every():每一项都返回true,结果返回true
some():任意一项返回true,结果返回true
filter() : 返回true的项组成的数组
forEach(): 没有返回值
map(): 返回每次调用的结果组成的数组
(三)Function类型:
函数内部属性arguments和this。arguments还有个属性叫做callee,该属性时一个指向拥有arguments对象的指针。如:
//不使用arguments.callee
function factorial(num) {
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
//使用arguments.callee
function factorial(num) {
if(num<=1){
return 1;
}else{
return num*argunemts.callee(num-1);
}
}
//好处:减少代码内部与函数名的耦合关系,提高复用性
另外一个属性caller。这个属性保存着调用当前函数的函数的引用。如:
function outer() {
inner()
}
function inner() {
alert(inner.caller)
}
outer() //outer函数
//为了降低耦合还可以这样
function outer() {
inner()
}
function inner() {
alert(arguments.callee.caller)
}
outer() //outer函数
再来说说apply()和call();
作用:都是在特定的作用域中调用函数,实质时改变函数里面this对像的值。
区别:传参数方式不相同。
apply(作用域,参数数组)接受两个参数。
call(作用域,传递给函数的参数1,传递给函数的参数2,…传递给函数的参数n),每个参数都必须详细列出来。
eg:
function sum(num1,num2) {
return sum1+sum2;
}
function applysum(num1,num2){
return sum.apply(this,arguments);
//return sum.apply(this,[num1,num2])
}
applysum(1,3)
function sum(num1,num2) {
return sum1+sum2;
}
function callsum(num1,num2){
return sum.call(this,num1,num2)
}
call(1,3)
但这两个函数真正强大的地方时扩充函数赖以运行的作用域。如:
window.name='dhq';
var obj = {
name: 'dhq2'
}
function sayName() {
alert(this.name)
}
sayName() //dhq
sayName.call(this) //dhq
sayName.call(window) //dhq
sayName.call(obj) //dhq2
String类型
localeCompare()方法比较两个字符串,
eg:’yellow‘.localeCompare(‘red’) //1
’yellow‘.localeCompare(‘zoo’) //-1
’yellow‘.localeCompare(‘yellow’) //0
规则:按字幕表的排序,(red)字符串参数在(yellow)字符串前面,返回1,
evel()方法
将字符串转为js脚本,从而执行js脚本,最好不用这个方法,安全性太差。
Math类型
max()和min()
eg:返回数组中的最大数或着最小数
let arr=[1,101,12,1223,1,45];
let max = Math.max.apply(Math,arr);