Math.max.apply(null,arr)相当于函数Math.max函数被window调用
var arr=[1,4,2,6,7];
console.log(Math.max.apply(null,arr));//7,null/undeinfed的时候,默认指向window对象
//其实Math.max()就相当于一个函数,然后这个函数被调用的对象指向window
console.log(Math.max(3,5,1,5,7));//7
console.log(Math.max(arr));//NaN
//Math.max方法里面的参数应该是数值,不应该是数组,如果要传递数组就要用apply
var a=10;
function one(){
console.log(this.a)
}
one.call(null);//10
//其实就是 函数.call(null) => window.函数
打开一个新窗口
使用window.open()函数,第一个参数为网址地址或者文件路径,第二个参数是窗口名字,window.open('www.baidu.com','win2')
- 详细参数解析:
-
- 第一个参数是URL地址或者文档路径
-
- 第二个参数是窗口名称。可选
-
- 第三个参数是窗口的参数信息,可选
-
- 第四个参数是窗口是否作为历史记录,可选,false/true
判断一个对象是否属于数组,最好怎么做?
- typeof(arr),
typeof返回的是基本数据类型及object,不会详细到array的,所以不行
- arr instanceof Array,
这一点还不透彻,说的是在多iframe/window环境下,通过Instanceof来识别对象是否属于数组会出错
- arr.toString,
直接使用toString函数自然是数组有什么就返回什么了,例如[1,2] => '1,2'
Object.prototype.toString.call(arr) === '[object Array]';这才是正确的
var obj={};
console.log(obj.__proto__)
var arr=[2,3];
console.log(arr.toString());
console.log(arr instanceof Array);//true
console.log(Object.prototype.toString.call(arr));//数组对象有prototype
//[object Array]
function one(){
console.log('函数实例对象有prototype?')
}
console.log(Object.prototype.toString.call(one));//[object Function]
var child=new one();
console.log(Object.prototype.toString.call(child));//[object Object]
console.log(child.prototype);//undefined
// 需要注意的是,_proto_属性是所有对象都有的,而prototype属性是只有函数才有的,实例对象没有!
console.log(Object.__proto__)
console.log(Object.prototype);
console.log(Object.prototype.toString);//这就是一个函数!!
console.log(Object.prototype.toString());//该函数返回的是一个对象的原型的字符串
//注意,上面之所以用Object.prototype.toString.call(child)有效
//是因为Object.prototype.toString就是被调用的函数,相当于 child.函数
// 所以这样的toString自然是没错的,因为不是像我之前想的那样改成child.prototype.toString