Open ChenPt opened 6 years ago
对于每一个一个变量,变量的值都是存在栈内存中的。 对于变量值为常量(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
这是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方法,向下取整,去掉小数,得到新的值,如果新值与旧值相同,说明该值是整数,否则不是整数
isInteger
function isInteger(value) { return typeof value === 'number' && isFinite(vale) && value === Math.floor(value) } isInteger(1.0) // true isInteger(1.1) // false
关于const
对于每一个一个变量,变量的值都是存在栈内存中的。 对于变量值为常量(number,string,boolean)的变量来说,栈内存存储的就是变量值了。 而对于变量值为引用类型的值的变量来说,栈内存存储的只是一个指针,指针的值是堆内存某个单元,该单元存储的是某个对象。
const关键字保证了用该关键字生成的变量的值不可被改变,实际上指的是该变量在栈内存中存储的值不可以被改变,对于常量类型来说就是
值
,对于引用类型来说,可以理解为一个指针,该指针不可以改变,而该指针指向的对象是可以被修改的。报错原因见上面分析。 给出一个图
关于解构赋值
解构赋值实际上就是模式匹配, 理解了这个就对解构赋值整体有个认知了。
需要分清模式和变量.
关于新增的Number对象的方法
isInteger
这是ES6新增的一个判断数字是否是整数的方法。
给出一个小数点后为0的数字,isInteger方法也判断它是整数。我之前没了解到这个方法之前,自己实现的判断整数的方法是利用parserInt和parseFloat, 如果一个数字或者字符串经过这两个方法处理后的数值相等,那么说明这个数字为整数。否则就是浮点数。
isInteger
内部实现是使用Math.floor方法,向下取整,去掉小数,得到新的值,如果新值与旧值相同,说明该值是整数,否则不是整数