• 浏览器解析js和type判断数据类型


    ### 浏览器解析:
    - 1.当浏览器(内核、引擎)解析和渲染js的时候,会给js提供一个运行的环境,这个环境叫做“全局作用域(后端global / 客服端window scope)”
    - 2.代码自上而下执行(之前有个变量提升阶段)
    => 基本数据类型值,会存储当前作用域下
    ```
    var a = 12;
    var b = a; 栈内存本身就是js代码运行的环境,所以的基本类型存储在栈内存中开票一个位置进行存储。
    b = 13;
    console.log(a);

    var obj1 = { n: 100};
    var obj2 = obj1; 堆内存用来存储引用类型的信息值的对象的,对象存储的是键值对,函数存储的事代码字符串
    obj2['n'] = 200;
    console.log(obj1.n); //=>200
    ```
    var a = 12 ;
    var b = 13 ; a和b没有任何关系,按值操作
    1) 首先开辟一个空间存储12
    2)在当前作用域中声明一个变量a (var a)
    3)让那个声明的变量和存储的12进行关联(把存储的12赋值给a => 赋值操作叫定义)
    => 基本类型是重新赋值操作,基本数据类型也叫值类型,是按照值来操作:把原有的值复制一份,放到新的空间位置上和原来的值没有任何关系

    => 引用类型的值不能直接存储到当前作用域下,(因为可能存储的内容过于复杂)我们需要开辟一盒新的空间(也就是仓库),把内容存储到这个空间中
     
    var obj1 = {n:100};
    1)首先开辟一个新的内存空间,把对象的键值对以此存储起来(为了保证后面可以找到这个空间,此空间有16进制)
    2)声明一个变量,让变量和空间地址关联在一起(把空间赋值给变量)

    引用类型不是按照值来操作,它操作的事空间的引用地址:把原来的空间地址赋值给新的变量,但是原来的空间没有别克隆,还是一个空间,这样就出现多个变量关联的是相同的空间,
    值类型不会让2个变量产生关联,引用类型会产生关联。
    * 作用域里面的内存叫栈内存

    ###
    - 1.形成全局作用域
    - 2. 代码自上而下执行
    开辟一个新的堆内存,把键值对存储在堆内存中
    n:10,
    m:obj.n * 10 =>obj.n 此时堆内存信息还没有存储完成,空间地址没有给obj此时的obj是underfined,obj.n就是underfined.n
    ```
    var obj = {
    n:10,
    m: obj.n*10
    };
    console.log(obj.m);
    VM165:3 Uncaught TypeError: Cannot read property 'n' of undefined
    at <anonymous>:3:11
    ```
    正确的是在外获取:
    ```
    var obj = {
    n:10,
    };
    obj.m =obj.n*10;
    console.log(obj.m);
    => VM207:6 100
    ```
    ### js中的判断语句
    - 1.if / else / else if
    ```
    var num =12;
    if (num>10){
    num++;
    } else if(num>=0 && num <=10){
    num--;
    } else {
    num+=2;
    }
    console.log(num); =>13
    ```
    `*有一个条件成立,后面不管是否还有成立条件,都不在判断执行了`
    关于条件可以怎么写?
    // >= /<= / ==(常规等比较) %取余 4%2 =>0
    ```
    if(0){
    //=> 不管在条件判断中写什么,最后总要把其计算出true/false判断条件是否成立(把其他的值转化成布尔类型,只有0,NaN,'',null,underfined是false,其余是true)
    }

    if('3px'+3){
    //=>在js中,+ - * / % 都是数学运算,除 + 以外。其余运算符的时候,如果遇到了非数字类型的值,首先转化为数字类型(number),然后在进行运算
    '3px'+3 => '3px3'
    }
    if ('3px'-3){
    '3px'-3 =>NaN
    }
    if(NaN>3) =>FASLE
     
    语法:
    if(({})>5)
    直接在console测试语法 ({})>5 'str'>5
    ```
    BAT面试题:
    ```
    var num = parseInt(' 35.5px');
    if (num==35.5){
    alert(0);
    }else if (num==35){
    alert(1);
    }else if (num==NaN){ //=> NaN和任何数不相等
    alert(2);
    }else if (typeof num=='number'){
    alert(3); //=> alert输出的都是字符串格式'3'
    //=>先算typeof num
    //=>再做比较
    }else {
    alert(4);
    }

    ```

    ### typeof
    > 在js中检测数类型的方式之一,还有其他
    > instanceof
    > constructor
    > Object.prototype.toString.call()

    ```
    语法:typeof[value] =>检测value的数据类型
    返回值:检测出来的结果是一个字符串,字符串中包含对呀的数据类型。例如:"number"/"string"/"boolean/"underfined"/"object"/"function"
    typeof 12 =>"number"
    typeof null =>"object" 因为null代表空对象指针(没有空间内存)
    typeof function(){} =>"function"
    typeof /^/ =>"object"
    typeof true =>"boolean"
    ```
    `*typeof检测数组/正则/对象,最后返回的都是"object, 弊端就是无法细分对象"`

    面试题:
    ```
    console.log(typeof []) =>"object"
    console.log(typeof typeof []) =>type "object" => "string"
    ```



  • 相关阅读:
    暑假第二十七测
    暑假第二十七测
    【真题解】牛宫
    【伪题解】牛宫
    最优贸易
    跳马问题
    求和问题
    【题解】山区建小学
    OpenStack之虚机冷迁移代码简析
    OpenStack之虚机热迁移代码解析
  • 原文地址:https://www.cnblogs.com/fron-tend/p/11968198.html
Copyright © 2020-2023  润新知