前端JavaScript

第三天

2020-03-06  本文已影响0人  晚月川

数据类型的检测

基本数据类型:number string boolean null undefined symbol BigInt
引用数据类型:object(普通对象、数组对象、正则对象、日期对象...) function

JS中数据类型的检测

typeof细节点
+ typeof 检测的结果首先是一个字符串,字符串中包含对应的数据类型(例如:"number"、"string"、"boolean"、"undefined"、"object"、"function"、"symbol"、"bigint")
+ 特殊检测结果:
    + NaN / Infinity 都是数字类型的,检测出来的结果是 "number"
    + typeof null 的结果是 "object" (这个是浏览器的BUG:所有的值在计算中都已二进制编码存储,浏览器中把前三位是000的当做对象,而null的二进制前三位就是000,所以被识别为对象,但是它不是对象,它是空对象指针,是基本类型值)
    + typeof 普通对象/数组对象/正则对象... 结果都是"object",这样就无法基于typeof区分是普通对象还是数组对象等了
        ```
        百度和腾讯的面试题
        console.log(typeof []); //=>"object"
        console.log(typeof typeof typeof []); //=>"string" 由于typeof返回的结果永远是一个字符串(字符串中包含了对应的类型),所以连续出现两个及两个以上typeof检测的时候,最后结果都是 "string"
        ```
        ```
        已知有一个变量x,但是我们无法确认其数据类型,我们需要有一个判断操作:当x的类型是对象的时候(什么对象都可以),则处理对应的事情
        if (typeof x == "object") { //=>null检测结果也会是"object",所以结果是"object"不一定是对象,还可能是null呢}
        if (x != null && typeof x == "object") {}
        ```

创建变量的几种方式

JS中3中常用的判断方式

一个变量在不同值情况下的不同操作,我们可以改写为 switch case 判断(他只能应用于等于什么值做什么事情,不能用于大于或者小于啥值做啥)
let x = '10'; if (x == 1) { x += 1; } else if (x == 5) { x += 2; } else if (x == 10) { // 条件成立 x += 3; } else { x += 4; } console.log(x); =>'103'

```
let x = '10';
    switch (x) {
        case 1: //=>在x等于1的情况下做什么
            x += 1;
            break; //=>每一种情况结束都要设置break(以供当此条件成立并处理完事情后,通知代码不在向下执行)
        case 5:
            x += 2;
            break;
        case 10: //=>'10'===10  FALSE
            x += 3;
            break;
        default: //=>等价于else,而且最后一个判断结束无需设置break
            x += 4;
    }
    console.log(x); //=>'104'  每一种case情况都是基于 === 进行比较的(严格比较,需要保证数据类型的一致)
```
在JS中,比较两个值是否相等,我们有以下几种方式

基本数据类型和引用数据类型的区别

webkit底层渲染机制(底层渲染的过程)

内存的概念
+ Stack 栈内存
+ Heap 堆内存
+ 所谓堆栈内存,其实就是在计算机内存中分配出来的一块空间,用于执行和存储代码的

上一篇 下一篇

猜你喜欢

热点阅读