4.28 递归 数组 对象

Posted xiaokeai233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.28 递归 数组 对象相关的知识,希望对你有一定的参考价值。

# 一、JS的编译和执行
- 偏原理
    - 可以不懂原理,只需要注意现象,可以正常写代码
    - 懂原理,帮助你提升代码性能,优化;方便面试
- js是一门解释性语言
    - 预先编译,再执行
    - 先通读全文,在解释含义
        - 找到var和function,做出对应提升
- 编译时
    - **提升**
- 执行时
    - 按照逻辑,结构正常执行
## 变量和函数会提升
- var的提升
    - 提前声明,=号的位置赋值
        ```js
        console.log(a);     // undefined
        var a = 10;
        console.log(a);     // 10
        ```
        - ↑↑↑↑等价于↓↓↓↓
        ```js
        var a;
        console.log(a);     // undefined
        a = 10;
        console.log(a);     // 10
        ```
- function的函数提升
    - 整体提升
    - 即提前声明,有提前赋值
- 如果var遇到function
    1. 赋值式创建函数       ********
        ```js
        var fn = fucntion(){}
        ```
        - 提升的是var,不是function
    2. 变量和函数重名
        ```js
        var a = "hello";
        function a(){}
        ```
        - var提升的更高,所以function占便宜,生效的是function
 
# 二、函数的高级应用-递归
- 在函数内部执行自己
- 递归就是函数自己调用自己
- 递归类似于循环
- 递归函数要注意停止/返回,否则会造成死递归
- 递归比较消耗性能,尽量少用

# 三、对象的介绍
## 1. 什么是对象
- 其实就是一种**事物的描述**,在程序中对象是一种数据类型
    - 描述水杯:
        - 材质:塑料
        - 容量:1000ml
        - 颜色:白色
        - 形状:圆形
        - 功能:容器
    - 把以上信息,组合打包用来表示一件事物,之后,就叫对象
- 程序中的对象主要用来:存储信息
## 2. 如何得到对象(创建对象)
- 字面量
    ```js
    var o1 = {}
    ```
- 构造函数
    ```js
    var o2 = new Object();
    ```
## 3. 对象的意义和本质
- 意义(功能)
    - 存储数据(信息)
    - 编程(面向对象编程)
- 本质
    - 键值对
## 4. 对象的操作
- 点语法(.)
    - 对象.属性名
    ```js
        var o = {};
    ```
    - 读
    ```js
        console.log(o.name);
    ```
    - 写
    ```js
        o.name = "Admin";
        o.age = 18;
        o.sex = "男";
        o.sayHello = function(){
            console.log("你好,我叫:" + obj.name);
        }
    ```
- 字面量创建对象时,可以很方便的立即写入初始属性
    ```js
    var obj = {
        name: "Admin",
        age: 18,
        sex: "男",
        sayHello:function(){
            console.log("你好,我叫:" + obj.name);
        }
    };
    ```
- 注意:**任何两个对象都不相等**
    - 如果相等了,意味着就是一个对象

# 四、数组的介绍
## 1. 什么是数组?
- 数据的组合,一组数据
- 当需要操作多个数据时,可以给数据打包,数组
    - 数组其实也是对象,只是存储数据的形式不一样,但是类型是一样的
## 2. 如何得到数组(创建数组)
- 字面量
    ```js
    var arr1 = [];
    ```
- 构造函数
    ```js
    var arr2 = new Array();
    ```
- 区别
    - 当字面量内只有一个数值型数据时,表示一个数据
    - 当构造函数内只有一个数值型数据时,表示长度
- 注意区别,按需选择

以上是关于4.28 递归 数组 对象的主要内容,如果未能解决你的问题,请参考以下文章

从 SimpleXML 对象到数组的递归转换

PHP - 递归数组到对象?

递归找出数组中对象属性为某个值的选项,不改变原数组

AngularJS将递归JSON解析为对象数组

递归判断多维数组中对象是否有值

复杂对象转数组。多层嵌套,递归实现