yukihirop
@yukihirop

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JavaScriptで 「;hoge='hoge'」という記法はどういう意味ですか?(先頭に;を打つ意味)

質問内容

vue/composition-apiのコードを読んでいた時に見つけたのですが、どういう時に使う記法かわかるかたいらっしゃいますか?

ちなみに、vue/composition-apiではこのように書かれています。

// https://github.com/vuejs/composition-api/commit/95d87f153fccc1dfc2c4ac18a975fa83e330b956#diff-51fe923fc2cccfa78ad3d432f248f66103848da274120fba160cb56e4f120a08R78-R87
    computedSetter = (v: T) => {
      if (__DEV__ && !set) {
        warn('Write operation failed: computed value is readonly.', vm!)
        return
      }

      ;(computedHost as any).$$state = v
    }

動作確認

nodejsでは普通に動く。

$ node
Welcome to Node.js v13.14.0.
Type ".help" for more information.
> ;hoge='hoge'
'hoge'
> hoge
'hoge'

ブラウザでも動く。

image.png

よろしくお願いします。

1

3Answer

そのコードの;は合ってもなくても同じなので書いた人のミスでしょう。

ただ、行はじめの;は意味を保つ場合もあります。

それは以下のようなコードです。

let x: any

const e = function () {
    console.log('hello')
}

;(x as any).test()
let x: any

const e = function () {
    console.log('hello')
}

(x as any).test()

上記の違いは後者のコードにセミコロンがないだけですが、後者はコンパイルエラーとなります。
(x as any) が関数呼び出しのかっこと勘違いされてしまっているためです。
そのため;をつけてここでコードは一旦終わりですよ、という目印を付ける必要がある場合があります。

なので、行はじめの;は意味を保つ場合もあります。

4Like

Comments

  1. @yukihirop

    Questioner

    解答ありがとうございます。勉強になりました。丁寧な例まで添えて頂き理解ができました。

( で始まる行の頭にセミコロンが必要な場合があることについては @monaka_ben_mezd さんのおっしゃる通りです。同様に、 [ で始まる行が前の行に続く添え字と解釈されるのを防ぐためにセミコロンが必要なことがあります。

そのコードにセミコロンがある理由について補足しますと、コードフォーマッタの Prettier で整形するように設定されているからです。 Prettier は ( または [ で始まる行の先頭に(無意味な場合であっても)セミコロンを挿入します。 意味があるときだけ挿入するよりも設計が単純になるためだと思われます。

2Like

Comments

  1. @yukihirop

    Questioner

    解答ありがとうございます。勉強になりました。

    >Prettier は ( または [ で始まる行の先頭に(無意味な場合であっても)セミコロンを挿入します。 意味があるときだけ挿入するよりも設計が単純になるためだと思われます。

    なるほどですね!
    背景まで教えてくれてありがとうございます!

問題が解決したので質問はクローズさせていただきます。
解答ありがとうございました!:bow_tone1:

1Like

Your answer might help someone💌