这是我参与「第五届青训营」笔记创作活动的第13天。
作用域
- 全局作用域
- 直接编写在 script 标签中的 JS 代码,都属于全局作用域
- 在页面打开时创建,在页面关闭时销毁
- 全局对象 window,代表浏览器窗口,创建的变量都是 window 对象的属性,创建的函数都是 window 对象的方法
- var声明变量,不论放在哪儿都会被提前,但不会赋值;所以不写 var 语句顺序错误会报错
- var声明函数,只有使用函数声明形式创建的函数会被提前(function niu ( ) { })。
- 函数作用域
- 函数作用域中可以访问全局变量,但反过来不是
this
- 浏览器中函数自带的隐含参数,就和 window 一样
- 以函数形式调用时,this 就是 window
以方法的形式调用时,this 就是调用方法的那个对象()
以构造函数的形式调用时,this 就是新创建的那个对象
使用 call 和 apply 调用时,this 是指定对象
原型对象 prototype
只要是函数,都会有 prototype 属性
- 当函数通过构造函数调用时,他所创建的对象中都会有一个属性指向 prototype
hanshu__proto__ == gouzao.prototype
- 因此可以将共有的属性添加到原型对象中
gouzao。prototype.a = 123;
补充:
console.log(hanshu.hasOwnProperty("age")); //检查对象自身是否含有该属性,原型对象中有的不算
垃圾回收
垃圾:一个对象没有任何变量或属性
js会自动垃圾回收,我们只需将不再使用的对象设置为 null
obj = null;
内建对象部分
数组
也是一个对象,用于存储值,与对象不同的是:数组是用数字来作为索引操作元素。
创建对象
//创建数组对象
var arr = new Array();
//想数组中添加元素:数组【索引】=值
arr[0] = 10;
arr[1] = 10;
console.log(arr[3]); //"undedfined"
数组属性
//数组的最后一个位置添加元素
arr[arr.length] = 70;
//字面量形式创建一个长度为 10 的数组
arr = newArray(10);
Array 对象方法
//push()
var arr = ["niu","bi"];
arr.push("xxm","xixi");
console.log(arr); //"niu,bi,xxm,xixi"
//unshift()
arr.unshift("a","b");
console.log(arr); //"a,b,niu,bi,xxm"
//pop()
result = arr.pop();
console.log(arr); //"niu,bi,xxm"
console.log(result); //"xixi"
//shift()
result2 = arr.shift();
console.log(arr); //"b,niu,bi,xxm"
console.log(result2); //"a"
//forEach() 需要一个函数作为参数。
//由我们创建但是不由我们调用的是回调函数,浏览器会在回调函数中传递三个参数
var arr = [1,2,3,4];
arr.forEach(function(value, index, arr){
console.log(a);
})
//slice(start,end) 参数是数组的索引
//该方法不改变原数组,直接创建新数组
result3 = arr.slice(0,-1); //负一就是倒数第一个
console.log(result3); //"b,niu,bi"
console.log(arr); //"b,niu,bi,xxm"
//splice(start,删除的数量,添加在start前面的元素)
//该方法会改变原数组,将指定元素从原数组删除,并将删除的元素作为返回值返回
//concat()
arr.concat(arr2,"xxm");
//不会对原数组产生影响,创建新数组
//join()
//不会对原数组产生影响,创建新数组,字符串数组
arr.join("~"); //"b~niu~bi~xxm"
arr.join(); //"b,niu,bi,xxm"
//reverse()
//会对原数组产生影响
//sort() 完全按照unicode排序,数值也是
//会对原数组产生影响
//使用回调函数可以解决数值排序问题
arr.sort(function(a,b){
return a - b; //升序排列
})
函数对象的方法
- call( ),apply( )
//call(),apply() 将对象指定为第一个参数,修改了this
function fun(){
}
fun.call(obj,a,b);
fun.apply(obj,[a,b]); //两者区别
fun(); //三个效果一样
- arguments
~ 调用函数时,除了 this,还会传递封装实参对象 arguments
~ 一个类数组对象,可以索引,有长度
~ 实参都会在 arguments 中保存
~ 有属性 callee,对应当前指向函数的对象
- Date 对象
~ 表示时间
var d = new Date();
console.log(d); //会封装为当前代码执行的时间
var d2 = new Date("12/03/2022 11:10:30"); // 月/日/年 时:分:秒
console.log(d2);