快速搞定JS前端面试 -- 第二章 JS基础-变量类型和计算

第二章 JS基础-变量类型和计算

一、JS基础

1. 值类型与引用类型

2. typeof运算符

二、变量计算与类型转换

1. 字符串拼接

2. ==和===

3. if语句与逻辑计算

三、问题解答总结

 1. typeof可以判断那些类型?

 2. 何时使用==何时使用===?

 3. 值类型和引用类型的区别?

 4. 手写深拷贝

四、小结


题目引入

  1. typeof能判断哪些类型?
  2. 何时使用=== 何时使用==?
  3. 值类型和引用类型的区别?
  4. 手写深拷贝

一、JS基础

1. 值类型与引用类型

值类型

引用类型

let a = 100

let b = a

a = 200

Console.log(b)   // 100

let a = { age:  20 }

let b = a

b.age = 21

Console.log(a.age)   // 21

堆栈分析:(栈是从上往下,堆是从下往上)

值类型

引用类型:

常见的值类型:number 、undefined、string、boolean、symbol

常见引用类型:object、array  特殊引用类型:null、fu()函数

2. typeof运算符

// 判断所有值类型

Let a;               typeof a  // undefined

const str = abc;      typeof str   // string

const n = 100;        typeof n   // number

const b = true;        typeof b   // boolean

const s = Symbol(  s );  typeof s   // symbol

// 能判断函数

typeof console.log    // function

typeof function() {}    // function

// 能识别引用类型(不能再继续识别)

typeof null    // object

typeof [a, b]  // object

typeof { x: 100 }  // object

3. 深拷贝

浅复制

const obj1 = {
    age: 20,
    name: 'xxx',
    address: {
        city: 'beijing'
    }
}
const obj2 = obj1
obj2.address.city = 'shanghai'
console.log(obj1.address.city)   // shanghai

深复制

const obj1 = {
    age: 20,
    name: 'xxx',
    address: {
        city: 'beijing'
    },
    arr: ['a', 'b', 'c']
}
const obj2 = deepClone(obj1)
obj2.address.city = 'shanghai'   
obj2.arr[0] = 'a1'
console.log(obj1.address.city)   // beijing
console.log(obj1.arr[0])         // a
/** 
 * 深拷贝
 * @param {Object} obj 要拷贝的对象
 */
function deepClone(obj = {}) {
    if (typeof obj !== 'object' || obj == null) {
        // obj 是 null ,或者不是对象和数组,直接返回
        return obj
    }
    // 初始化返回结果
    let result
    if (obj instanceof Array) {    // 判断是否为数组
        result = []
    } else {
        result = {}
    }
    for (let key in obj) {
        // 保证 key 不是原型的属性
        if (obj.hasOwnProperty(key)) {
            // 递归调用!!!
            result[key] = deepClone(obj[key])
        }
    }
    // 返回结果
    return result
}


二、变量计算与类型转换

1. 字符串拼接

const a = 100 + 10    // 110  可以使用100 + parseInt(‘10’)
const b = 100 + ‘10’   // 10010
const c = true + ‘10’  // true10	
const d = 100 + parseInt(‘10’)    // 110

2. ==和===

100 == ‘100’   // true
0 == ‘’   // true
0 == false   // true
false == ‘’   // true
null == undeined   // true

(==尽量尝试让他们变成相等)

// 除了 == null 之外,其他都一律用 ===
Const obj = { x: 100 }
If (obj.a == null ) {}
// 相当于
// if (obj.a === null || obj.a === undefined) {}

3. if语句与逻辑计算

truly变量:!!a === true的变量(经过两次非运算之后为真)

falsely变量: !!a === false的变量(经过两次非运算之后为假)

//  一下是falsely变量,除此之外都是truly变量
!! 0 === false
!! NaN === false
!! ‘’ === false
!! null === false
!! undefined === false
!! false === false

三、问题解答总结

 1. typeof可以判断那些类型?

    识别所有值类型

    识别函数

    判断是否是应用类型(不可以再细分)

 2. 何时使用==何时使用===?

    除了==null之外,其他一律用===

 3. 值类型和引用类型的区别?

    值类型是深复制,引用类型是浅复制

 4. 手写深拷贝

    注意判断值类型和引用类型

    注意判断是数组还是对象

    使用递归

四、小结

 1. 值类型VS引用类型、堆栈模型、深拷贝

 2. Typeof运算符

 3. 类型转换、truly和falsely变量

发布了26 篇原创文章 · 获赞 6 · 访问量 1391

猜你喜欢

转载自blog.csdn.net/Sabrina_cc/article/details/105449535