1.函数的对象原型
// var fun = new Function();
var obj = new Object();
console.log(obj)
// caller返回调用的函数,包括注释
function fun(){
console.log('调用我的是'+fun.caller);
}
function demo(){
// 调用fun函数
fun()
}
demo();
// 若在顶层调用,则返回null
fun();//null
2.函数中this的指向问题
/*
在ECMAScript(ES5)中this的指代与其调用的位置有关
常见的this的指代:
***1、this作为普通函数调用时,this指代的是全局对象window(调用全局变量)
***2、this作为普通对象调用,this指代当前对象(实例化的对象)
3、this作为构造函数调用,this指代的是实例化对象
4、this作为apply切换时调用,this指代的是apply切换后的对象
*/
// 1、this作为普通函数调用时
// 全局变量
var name = '耿育淼';
function fun1(){
// 局部变量
var name = '刘璟';
console.log(name);//刘璟 全局变量和局部变量同时存在,优先使用局部变量
console.log(this.name);
}
fun1();
// 2 this作为普通对象调用,this指代当前对象
var name = '孙浩';
var obj = {
name:'小明',
age:22,
say:function(){
console.log(obj == this);//true
console.log(obj === this);//true
// console.log(obj.name+'是小红的男朋友');//小明
console.log(this.name+'是小红的男朋友');//小明
}
}
obj.say();
// 示例:
// 获取所有的this
var oLi = document.getElementsByTagName('li');
console.log(oLi);
// 循环绑定事件
for(var i=0;i oLi[i].onclick = function(){ // console.log('111') console.log(i); console.log(this) this.style.background = 'green'; } } // 3、this作为构造函数调用 // 自定义构造函数 function demo(){ this.name = '小李子'; this.age = 18; this.say = function(){ console.log('正是李子成熟季'); } } var obj1 = new demo(); console.log(obj1); console.log(obj1.name);//小李子 // var obj2 = { name:'向同学', age:20, love:function(){ console.log(this.name+'喜欢的是...'); } } // obj2.love();//向同学 obj2.love.apply(obj1);//小李子 obj2.love.apply();//孙浩 若apply()未传入参数,则代表全局变量 3.数组方法 /* 函数的三要素: 功能 参数 返回值 */ // concat()数组连接 不改变原数组 var arr = [1,2,3,4,5]; var newArr = arr.concat('龚瑞'); console.log(newArr);//[1, 2, 3, 4, 5, "龚瑞"] console.log(arr);//[1, 2, 3, 4, 5] var arr = [1,2,3,4,5]; // 多个参数之间采用逗号连接 var newArr = arr.concat('龚瑞','成哥'); console.log(newArr);// [1, 2, 3, 4, 5, "龚瑞", "成哥"] var arr = [1,2,3]; var arr1 = [4,5,6]; var newArr = arr.concat(arr1); console.log(newArr);//[1, 2, 3, 4, 5, 6] // join()将数组按照指定的字符拼接为字符串(默认按照逗号连接) var arr = ['周','三','就','是','情','人','节']; var newStr = arr.join();//周,三,就,是,情,人,节 var newStr = arr.join('');//周三就是情人节 console.log(newStr); /* 出栈入栈 直接改变原数组 push()从数组的尾部压入一个元素 pop()从数组的尾部弹出一个元素,并接收返回的元素 unshift()从数组的头部压入一个元素 shift()从数组的头部弹出一个元素,并接收返回的元素 */ // push()从数组的尾部压入一个元素 var arr = [1,2,3,4,5]; arr.push('向同学'); console.log(arr);// [1, 2, 3, 4, 5, "向同学"] // 若压入的是数组,最终只占一个下标 var arr1 = ['黄满鑫','陈冬梅','耿育淼']; arr.push(arr1); console.log(arr);//[1, 2, 3, 4, 5, "向同学", Array(3)] // pop()从数组的尾部弹出一个元素,并接收返回的元素 var res = arr.pop(); console.log(res);//返回弹出的元素 ["黄满鑫", "陈冬梅", "耿育淼"] console.log(arr); // unshift()从数组的头部压入一个元素 arr.unshift('a'); console.log(arr); // shift()从数组的头部弹出一个元素 var res = arr.shift(); console.log(arr); console.log(res); 4.数组的截取 /* slice(start,end)数组的截取 一个参数:从指定下标开始截取,截取到最后 两个参数:从指定的下标开始截取,截取到指定下标之前 */ // 一个参数:从指定下标开始截取,截取到最后 var arr = [1,2,3,4,5]; var newArr = arr.slice(2); console.log(newArr);//[3, 4, 5] // 两个参数:从指定的下标开始截取,截取到指定下标之前 var arr = [1,2,3,4,5]; var newArr = arr.slice(1,3); console.log(newArr);//[2, 3] var arr = [1,2,3,4,5]; // 负数代表倒数第几个 var newArr = arr.slice(-2); console.log(newArr);// [4, 5] var arr = [1,2,3,4,5]; // 负数代表倒数第几个 var newArr = arr.slice(1,-1); console.log(newArr);//[2, 3, 4] var arr = [1,2,3,4,5]; // 负数代表倒数第几个 var newArr = arr.slice(-3,-1); console.log(newArr);//[3, 4] // 数组只能从左往右截取 var arr = [1,2,3,4,5]; // 负数代表倒数第几个 var newArr = arr.slice(-1,1); console.log(newArr);//[] 5.数组反转和排序 // reverse()数组的反转 var arr = [1,2,3,4,5]; arr.reverse(); console.log(arr);//[5, 4, 3, 2, 1] // sort()数组按照ASCII码码值排序 底层为冒泡排序 var arr = [4,7,2,9,0,8]; arr.sort(); console.log(arr);//[0, 2, 4, 7, 8, 9] var arr = [4,7,20,23,9,5,230,8]; arr.sort(); console.log(arr);//[20, 23, 230, 4, 5, 7, 8, 9] /* 数字:48~57 大写字母:65~90 小写字母:97~122 */ var arr = ['a','A',4,7,2,9,0,8]; arr.sort(); console.log(arr);//[0, 2, 4, 7, 8, 9, "A", "a"] 6.数学函数 /* abs()绝对值 max()最大值 min()最小值 floor()向下取整 ceil()向上取整 round()四舍五入 pow()次方根 sqrt()开平方根 random()随机数 */ console.log(Math); // abs()绝对值 var num = 10;//10 var num = -10;//10 var res = Math.abs(num); console.log(res) // 最大值 var res = Math.max(5,8,2,9,0); console.log(res); // 最小值 var res = Math.min(5,8,2,9,0); console.log(res); // floor()向下取整 var num = 9.9; var res = Math.floor(num); console.log(res);//9 只保留整数位 // 向上取整 var num = 9.0001; var res = Math.ceil(num); console.log(res);//10 进一法取整 // round()四舍五入 var num = 9.0001; var num = 9.6;//10 var res = Math.round(num); console.log(res);//10 进一法取整 // pow(底数,指数)次方根 var res = Math.pow(2,10); console.log(res); // sqrt()开平方根 var res = Math.sqrt(16);//4 console.log(res); // random()随机数 自动产生0~1的随机数,但是不包含1 console.log(Math.random()); // 生成0-9的随机数 var num = Math.floor(Math.random()*10); console.log(num); // 生成0~255的随机数 var num = Math.floor(Math.random()*256); console.log(num); // 拓展 四舍五入保留指定的小数位 var num = 36.6666; var res = num.toFixed(2); console.log(res);