• 什么是不变性?

    什么是不变性?

    不可变性是一种设计模式,其中在实例化之后不能修改某些东西。 如果我们想改变那个东西的值,我们必须用新的值重新创建它。 一些JavaScript类型是不可变的,一些是可变的,意味着它们的值可以改变,而不必重新创建它。 让我们用一些例子来解释这个区别:

    1. let movie = {
    2. name: 'Star Wars',
    3. episode: 7
    4. };
    5. let myEp = movie.episode;
    6. movie.episode = 8;
    7. console.log(myEp); // outputs 7

    正如你可以看到在这种情况下,虽然我们更改了movie.episode的值,myEp的值没有改变。 这是因为movie.episode的类型,number是不可变的。

    1. let movie1 = {
    2. name: 'Star Wars',
    3. episode: 7
    4. };
    5. let movie2 = movie1;
    6. movie2.episode = 8;
    7. console.log(movie1.episode); // outputs 8

    然而,在这种情况下,更改一个对象上的episode的值也会更改另一个对象的值。 这是因为movie1movie2Object 类型,Object 是可变的。

    在JavaScript内置类型中,以下是不可变的:

    • Boolean
    • Number
    • String
    • Symbol
    • Null
    • Undefined

    以下是可变的:

    • Object
    • Array
    • Function

    String是一种不常见的情况,因为它可以使用for...of进行迭代,并像数组一样提供数字索引器,但会执行以下操作:

    1. let message = 'Hello world';
    2. message[5] = '-';
    3. console.log(message); // writes Hello world

    这将在严格模式下抛出错误,并在非严格模式下静默失败。