相关疑难解决方法(0)

Javascript中冻结和密封的区别

我刚刚听说的JavaScript方法freezeseal,可以用来进行任何对象不变.

这是一个如何使用它的简短示例:

var o1 = {}, o2 = {};
Object.freeze(o2);

o1["a"] = "worked";
o2["a"] = "worked";

alert(o1["a"]);   //prints "worked"
alert(o2["a"]);   //prints "undefined"
Run Code Online (Sandbox Code Playgroud)

这些方法有什么区别,它们能提高性能吗?

javascript ecmascript-5

146
推荐指数
6
解决办法
3万
查看次数

为什么我可以在javascript中更改常量的值

我知道ES6还没有标准化,但是很多浏览器目前都支持 const JS中的关键字.

在规范中,它写道:

常量的值不能通过重新赋值来改变,并且不能重新声明常量.因此,尽管可以在不初始化的情况下声明常量,但这样做是没用的.

当我做这样的事情时:

const xxx = 6;
xxx = 999;
xxx++;
const yyy = [];
yyy = 'string';
yyy = [15, 'a'];
Run Code Online (Sandbox Code Playgroud)

我看到一切正常xxx6yyy[].

但是,如果我这样做yyy.push(6); yyy.push(1);,我的常数阵列已被改变.现在它是[6, 1],顺便说一句,我仍然无法改变它yyy = 1;.

我这是一个错误,还是我错过了什么?我用最新的chrome和FF29试了一下

javascript const ecmascript-6

80
推荐指数
6
解决办法
4万
查看次数

JavaScript const关键字

constJavaScript中的关键字是否创建了对不可变数据结构的不可变引用?[我假设JavaScript中存在不可变数据结构.]

因为string它似乎这样做:

var x = "asdf";
const constantX = x;

alert("before mutation: " + constantX);
x = "mutated"
alert("after mutation: " + constantX);
Run Code Online (Sandbox Code Playgroud)

输出:

突变之前:asdf

突变后:asdf

http://jsfiddle.net/hVJ2a/

javascript immutability

7
推荐指数
5
解决办法
7688
查看次数

ES6 const用于在JavaScript中创建对象原型; 这是一种模式吗?

我经常看到const用于创建基础对象.

  1. 这是一种模式吗?
  2. 如果是,有什么好处?

这里的例子:

const food = {
    init: function(type) {
        this.type = type;
    }
}

const waffle = Object.create(food);
waffle.init('waffle');
console.log(waffle.type);
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

4
推荐指数
1
解决办法
542
查看次数