ChenPt / dailyNote

dailyNode for myself
https://github.com/ChenPt/dailyNote/issues
0 stars 0 forks source link

4/16/《ES6标准入门》的笔记 #9

Open ChenPt opened 6 years ago

ChenPt commented 6 years ago

关于const

对于每一个一个变量,变量的值都是存在栈内存中的。 对于变量值为常量(number,string,boolean)的变量来说,栈内存存储的就是变量值了。 而对于变量值为引用类型的值的变量来说,栈内存存储的只是一个指针,指针的值是堆内存某个单元,该单元存储的是某个对象。

const关键字保证了用该关键字生成的变量的值不可被改变,实际上指的是该变量在栈内存中存储的值不可以被改变,对于常量类型来说就是,对于引用类型来说,可以理解为一个指针,该指针不可以改变,而该指针指向的对象是可以被修改的。

const AGE = 11;
const OBJ = {
    age: 12
}

AGE = 12   // TypeError: Assigment to constant variable  
OBJ["name"] = "PTPTPT"  // "PTPTPT"
OBJ = {}  // TypeError: Assigment to constant variable 

报错原因见上面分析。 给出一个图

关于解构赋值

解构赋值实际上就是模式匹配, 理解了这个就对解构赋值整体有个认知了。


let [a, b, c] = [1, 2, 3];
let { foo: name} = {foo: "hello"};
name  // "hello"

需要分清模式和变量.

var obj = {
    inner: {
        more: {
            age: 11
        }
    }
}

let [inner, inner: { more }, inner: { more: { age }}] = obj;
// 分别代表着对inner解构赋值, 对more解构赋值, 对age解构赋值。
inner // { more: { age: 11} }
more  // { age: 11}
age  // 11

关于新增的Number对象的方法

isInteger

这是ES6新增的一个判断数字是否是整数的方法。

Number.isInteger(1.0)  // true
Number.isInteger(1.1)  // false

给出一个小数点后为0的数字,isInteger方法也判断它是整数。我之前没了解到这个方法之前,自己实现的判断整数的方法是利用parserInt和parseFloat, 如果一个数字或者字符串经过这两个方法处理后的数值相等,那么说明这个数字为整数。否则就是浮点数。

//自己实现的一个判断整数的思路,x可为字符串。
function isInt(x) {
    if(parseFloat(x) === parseInt(x)) {
        return true
    } else {
        return false
    }
}

isInteger内部实现是使用Math.floor方法,向下取整,去掉小数,得到新的值,如果新值与旧值相同,说明该值是整数,否则不是整数

function isInteger(value) {
    return typeof value === 'number' &&
    isFinite(vale) &&
    value === Math.floor(value)
}

isInteger(1.0)  // true
isInteger(1.1) // false