如果这本书吃透再去看其他书就没有畏惧心理了,说实话,这本书传授的是内功,很多内容都知道,但是书中讲的是为什么是这样,因此也能加深理解,增强信心了
1. 使用toString()判断是否为数组
toString方法给出了对象的字符串表示
字符串 "[object Object]"对于任何对象都是一样的
console.log(Object.prototype.toString({}) === Object.prototype.toString({dev:"c++"})); //true
function is_Array(sth){
return Object.prototype.toString.call(sth) == "[object Array]";
}
var arr = [];
console.log(is_Array(arr));
也可以使用instanceof
someArr instanceof Array //true
结合call判断类型
function which_size(){
return Object.prototype.toString.call(this);
}
console.log(which_size.call(8)); //[object Number]
无法判断undefined,null
数组中的toString()
var arr1 = [1,2,3,4]
undefined
Array.prototype.toString.call(arr1)
"1,2,3,4"
> 表示注释(markdown)
2.默认参数
function add(one,two){
two = typeof two === "undefined" ? 2: two;
return one + two;
}
//typeof 总是返回字符串,排除默认参数为0
console.log(add(4,0));
3.任意多个参数
函数参数转换为数组
function toArray(){
var args = Array.prototype.slice.call(arguments);
return args;
}
console.log(toArray(1,2,6,8,0,5));
4.函数表达式
注意:在函数表达式中,function关键字是一个操作符,在函数声明中,它是一条语句,函数表达式必须有一个分号
5.函数中使用自由变量到定义函数的作用域去找,而不是调用函数的环境
function weiwei(){
var eat = "dumpling";
eatFood(); //因为this指向window
}
var eat = "bread";
function eatFood(){
console.log(eat);
//如果没传参,不管在哪里定,
//都要先到定义函数的作用域去寻找使用的变量
}
weiwei(); //bread
(6)使用new Function()的方式定义函数
函数末尾加分号
不可以在函数声明前面调用,也就是没有函数提升