javascript高级(1)

目录

数据类型

分类

判断 

数据

内存

基础问题

对象


数据类型

分类

1.基本(值)类型

  • string:任意字符串
  • Number:任意的数字
  • boolean:true/false
  • underfined
  • null 

2.对象(引用)类型

  • Object:任意对象
  • Function:一种特别的对象(可以调用执行)
  • Array:一种特别的对象(数值下标,内部是有序的)

判断 

typeof:可以判断:undefined/数值/字符串/布尔值,不能判断null与object

instanceof:判断对象的具体类型

===可以判断:undefined,null

注意:==会做数据转换,===不会做数据转换

通过判断是什么数据类型,就可以知道用来干什么的,如果是function则可以用来调用

1.基本

typeof返回数据类型的字符串表达

2.对象

instanceof

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var a;
        console.log(a);//undefined
        console.log(typeof a);//'undefined'
        console.log(a===undefined);//true
        console.log(typeof a==='undefined');//true
        console.log(typeof a===undefined);//false

        a=2;
        console.log(typeof a==='number');
        a='atguigu';
        console.log(typeof a==='string');
        a=true;
        console.log(typeof a==='boolean');
        a=null;
        console.log(a===null);//true

        
        console.log(typeof a);//object


        var b1={
            b2:[1,'abc',console.log],
            b3:function(){
                console.log('b3');
                return function(){
                    return 'aaa';
                }
            }
        }

        console.log(b1 instanceof Object,b1 instanceof Array);//true false
        console.log(b1.b2 instanceof Array,b1.b2 instanceof Object);//true true
        console.log(b1.b3 instanceof Function,b1.b3 instanceof Object);//true true
        console.log(typeof b1.b3==="function");

        console.log(typeof b1.b2)//object

        b1.b2[2](4);
        console.log(b1.b3()());
    </script>
</head>
<body>
    
</body>
</html>

问题思考:

1.undefined与null的区别?

undefined代表定义未赋值;null定义并赋值了,只是值为null

var a;
    console.log(a);//undefined
    a=null;
    console.log(a);//null

2.什么时候给变量赋值为null?

初始赋值,表明将要赋值为对象;结束时,让对象称为垃圾对象(被垃圾回收器回收)

// 起始
    var b=null;
    // 确定对象就要赋值
    b=['atguigu',12];
    // 最后
    b=null;

3.严格区别变量类型与数据类型

1)数据的类型

  • 基本类型
  • 对象类型

2)变量的类型(变量内存值的类型)

  • 基本类型        保存的就是基本类型的数据
  • 引用类型        保存的是地址值

数据

  1. 什么是数据?
    存储与内存中代表特定信息的东西,本质就是0101二进制。

  2. 数据的特点:可传递、可运算

  3. 万物(一切)皆数据, 函数也是数据

  4. 程序中所有操作的目标: 数据
    算术运算
    逻辑运算
    赋值
    调用函数传参

内存

什么是内存?

  • 内存条通电后产生的可存储数据的空间(临时的)

内存的产生和死亡: 内存条(集成电路板)——>通电——>产生一定容量的存储空间——>存储各种数据——>断电——>内存空间和数据全部消失

内存的空间是临时的, 而硬盘的空间是持久的

一块内存包含2个数据:

  • 内部存储的数据(一般数据/地址数据)
  • 内存地址值数据

内存分类:

  • 栈: 全局变量, 局部变量 (空间较小)
  • 堆: 对象 (空间较大)

注意内存,数据, 变量三者之间的关系?
内存是一个容器, 用来存储程序运行需要操作的数据。
变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据。

基础问题

关于赋值与内存的问题?
var a = xxx, a内存中到底保存的是什么?

  1. xxx是一个基本数据,保存的就是这个数据
  2. xxx是一个对象,保存的是对象的地址值
  3. xxx是一个变量,保存的是xxx的内存内容(可能是基本数据类型,也可能是地址值)

关于引用变量赋值问题?

  1.  2个引用变量指向同一个对象,通过变量修改对象内部数据,另一个变量看到的是修改后的数据
  2.  2个引用变量指向同一个对象,让其中一个变量指向另一个对象,另一引用变量依然指向前一个对象
     

        var obj1 = {name:'Tom'};
        var obj2 = obj1;
        obj2.age = 12;
        console.log(obj1.age);//12

        function fn(obj){
            obj.name = 'A';
        }
        fn(obj1);
        console.log(obj2.name);//A

        var a = {age:12};
        var b = a;
        a = {name:'BOB',age:13};
        b.age = 14;
        console.log(b.age,a.name,a.age);//14 Bob 13

        function fn2(obj){
            obj = {age:15};
        }
        fn2(a);
        console.log(a.age);//13

在JS调用函数传递变量参数时,是值传递还是引用传递?

理解1:都是值(基本/地址值)传递

理解2:可能是值传递,也可能是引用传递(地址值)

JS引擎如何管理内存?

1.内存生命周期

分配小内存空间,得到它的使用权;存储数据,可以反复进行操作; 释放小内存空间。

2.释放内存

局部变量:函数执行完自动释放

对象:成为垃圾对象 ==>垃圾回收器回收

  •        var a = 3;
           var obj = {};
           obj = undefined;
    
           function fn(){
               var b = {};
           }
    
           fn();
           //b是自动释放的,b所指向的对象是在后面的某个时刻由垃圾回收器回收
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

对象

1.什么是对象?

  • 多个数据的封装体(用来保存多个数据的容器)
  • 一个对象代表现实中的一个事物

2.为什么要用对象?

  • 统一管理多个数据

3.对象的组成?

  • 属性:属性名(字符串)和属性值(任意类型)组成
  • 方法:一种特别的属性(属性值是函数)

4.如何访问对象内部数据?

  • .属性名 :编码简单,有时不能用
  • ['属性名']:编码麻烦,能通用

基础问题

什么时候必须使用['属性名']的方式?

1.属性名包含特殊字符: - 、空格

2.属性名不确定

<script type="text/javascript">
       var p = {};
       //1、给 p 对象添加一个属性:content-type: text/json;
        p['content-type'] = 'text/json';
        console.log(p['content-type']);

        //2、属性名不确定
        var propName = 'myAge';
        var value = 18;
        // p.propName = value;//不能使用
        p[propName] = value;
        console.log(p[propName]);
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值