基础练习(2)|青训营笔记

49 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第13天。

作用域

  1. 全局作用域
  • 直接编写在 script 标签中的 JS 代码,都属于全局作用域
  • 在页面打开时创建,在页面关闭时销毁
  • 全局对象 window,代表浏览器窗口,创建的变量都是 window 对象的属性,创建的函数都是 window 对象的方法
  • var声明变量,不论放在哪儿都会被提前,但不会赋值;所以不写 var 语句顺序错误会报错
  • var声明函数,只有使用函数声明形式创建的函数会被提前(function niu ( ) { })。
  1. 函数作用域
  • 函数作用域中可以访问全局变量,但反过来不是

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; //升序排列
})

函数对象的方法

  1. call( ),apply( )
//call(),apply() 将对象指定为第一个参数,修改了this
function fun(){
​
}
fun.call(obj,a,b); 
fun.apply(obj,[a,b]); //两者区别
fun(); //三个效果一样
  1. arguments

~ 调用函数时,除了 this,还会传递封装实参对象 arguments

~ 一个类数组对象,可以索引,有长度

~ 实参都会在 arguments 中保存

~ 有属性 callee,对应当前指向函数的对象

  1. Date 对象

~ 表示时间

var d = new Date();
console.log(d); //会封装为当前代码执行的时间
var d2 = new Date("12/03/2022 11:10:30"); // 月/日/年 时:分:秒
console.log(d2);