好了,这回不一样了,真就是开阔视野,作用域啥的有点东西;对象都多种多样咧。(T_T)

数组

创建数组
1.数组(Array) :就是一组数据的集合 存储在单个变量下的优雅方式 
2. 利用new 创建数组
var arr = new Array(); // 创建了一个空的数组
3. 利用数组字面量创建数组 []
var arr = []; // 创建了一个空的数组
var arr1 = [1, 2, 'pink老师', true];
4. 我们数组里面的数据一定用逗号分隔
5. 数组里面的数据 比如1,2, 我们称为数组元素
6. 获取数组元素  格式 数组名[索引号]  索引号从 0开始 

遍历数组参考普通高级语言

数组转字符串
  • 利用字符分割,也就是把数组元素连接成新字符串
将数组 ['red', 'green', 'blue', 'pink'] 转换为字符串,并且用 | 或其他符号分割
1.需要一个新变量用于存放转换完的字符串 str。
2.遍历原来的数组,分别把里面数据取出来,加到字符串里面。
3.同时在后面多加一个分隔符
var arr = ['red', 'green', 'blue', 'pink'];
var str = '';
var sep = '*';
for (var i = 0; i < arr.length; i++) {
    str += arr[i] + sep;
}
新增数组元素
  • 直接修改数组长度
  • 直接尾部添加元素

函数

      function 函数名( 形参 ) {
          // 函数体
          return 返回值;
      }

函数名( 实参 );

      // 2. 函数表达式(匿名函数) 
      // var 变量名 = function() {};
      var fun = function(aru) {
          console.log('我是函数表达式');
          console.log(aru);

      }
      fun('老师');
      // (1) fun是变量名 不是函数名  
      // (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
      // (3) 函数表达式也可以进行传递参数
  • 如果实参的个数和形参的个数一致 则正常输出结果
  • 如果实参的个数多于形参的个数 会取到形参的个数
  • 如果实参的个数小于形参的个数 多于的形参定义为undefined 最终的结果就是 NaN
arguments的使用

不确定参数数量,使用arguments获取,实际为当前函数的内置对象,存储了传递的所有实参

  • arguments为伪数组
  • 具有数组长度length
  • 按照索引的方式进行存储
  • 没有真正数组的一些方法 pop(),push();
function f(){
   	console.log(arguments);
}
f(1,2,3)
//[1,2,3]

作用域

代码可用范围

​ js中没有块级作用域 js的作用域: 全局作用域 局部作用域 现阶段我们js 没有 块级作用域

​ js 也是在 es6 的时候新增的块级作用域

​ 块级作用域 {} if {} for {}

  • 全局作用域
  • 局部作用域

作用域链

内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链 就近原则

      var num = 10;

      function fn() { // 外部函数
          var num = 20;

          function fun() { // 内部函数
              console.log(num);

          }
          fun();
      }
      fn();

//20

JavaScript预解析

JavaScript解析器运行代码步骤

  • 预解析 :js引擎会把所有的 var 还有 function 提升到当前作用域的最前面
  • 代码执行:按照代码书写的顺序从上往下执行
预解析

预解析 : 变量预解析(变量提升) , 函数预解析(函数提升)

变量提升

把所有的变量声明提升到当前作用域最前面,不提升赋值操作

函数提升

把所有的变函数声明提升到当前作用域最前面,不调用函数

JavaScript对象

对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数

对象由属性和方法组成

  • 属性:事物的特征
  • 方法:事物的行为
键值对形式创建
多个属性和方法之间用逗号隔开
var obj = {
    xxx:xxx;
    xxf: functon(){
        xxx;
    }
};

利用new object 创建对象
每个属性和方法用 ; 隔开
var obj = new Object()
obj.xxx=xx;
obj.xxf= function(){
       
}
利用 = 赋值 添加对象的属性和函数

调用对象的属性和方法

对象名.属性名 || ['属性名']
obj.xxx ;  obj['xxx'] ;

对象名.xxf() ;

利用构造函数创建对象

构造函数就是把对象里面一些相同的属性和方法抽象出来封装到函数里

function 构造函数名() {
    this.属性 =;
    this.方法 = function() {}
}
可以内置形参
var xxx = new 构造函数名();
调用函数返回的是一个对象
  • 构造函数名字首字母要大写
  • 我们构造函数不需要return 就可以返回结果
  • 我们调用构造函数 必须使用 new
  • 我们只要new 构造函数名() 调用函数就创建一个对象 xxx {}
  • 我们的属性和方法前面必须添加 this