質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

133閲覧

Javascriptの論理和演算子につきまして

SugiuraY

総合スコア317

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/09/23 08:22

JavaScriptに関連するする書籍で論理和演算子(||)を勉強していたところ
よく意味のわからないコードに遭遇いたしました。。

Javascript

1function copy (o,p){ 2p=p || {}; //pにオブジェクトが渡されない場合には新たにオブジェクトを生成する 3//ここに関数を記述 4}

論理演算子として左側のp=pがはじめに評価されてtrueであればからのオブジェクト{}が
生成されるのは理解できるのですが、
引数"o"の存在とpにオブジェクトが渡されない場合の意味が全く謎です。。。

関数の中に"o"が出現しないのですが、コードの間違いでしょうか?
そうではないとしたら、この隠れた"o"にはどのような意味があり、"pにオブジェクトが渡されない場合"
とどのような関係があるのでしょうか。。。

よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ときどき、「引数を捨てる」必要のある場面が出てきます。コールバック関数では「いくつめの引数に何を渡す」と決まっているので、2番めだけ使いたいとなれば、「引数を2つ受け取った上で、1つ目は使わない」ということをしないといけない場面もあります。

投稿2017/09/23 10:26

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/09/23 10:40

ご回答いただきありがとうございます。 現状、捨てるべき引数を持たなければならないケースがあるという状況に ピンとこないですが、そのような場面があるということは非常に重要かと思いますので 記憶をいたします。
guest

0

関数に copy という名前がついています。
適当な名前ではなく具体的な名前がついているということは、記載されているのはその一行だけの単なる例ではなくもっと詳細に作られた例の一部だろうと思います。
書籍の前後を探してみてください。

o はここでは使っていません。
省いても何も変わりません。
他のページで使われているのだろうと思います。

投稿2017/09/23 10:59

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/09/23 19:24

コメント有難うございます。 周りを探してもとくになく、本書籍にはよくある例示の出し方の様です。 おそらくdeigo様のしめしているようなものを想像することを意図したものかと思います
guest

0

ベストアンサー

その書籍とは参考書ですか?
//ここに関数を記述
のところに処理を書いて、copy()を完成させなさいよ、という意味ではないですか?

投稿2017/09/23 09:31

deigo

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/09/23 10:44

コメントありがとうございます。 はい、いわゆるサイ本の例示になります。 もしかしたら、かりそめに"o"を引数に指定し、その後の関数でこれを 使用して、何か関数を作る漠然としたイメージで載せているのかもしれません。 しかしながら、それでもコメントアウトに記載のあるpにオブジェクトが渡され場合には というのp=pというのがなぜオブジェクトを渡そうとする行為を意味しているのかは少し謎です。。
deigo

2017/09/23 11:00 編集

var one = {hoge:0}; var another = {}; copy(another, one); // one の中身をanotherにコピーする という意図だと思います。 そして p=p || {};は以降の処理が滞りなく進むためのおまじないです。 pがfalseと評価される場合(0とかundefinedとか)には、空オブジェクトで初期化されます。 //ここに関数を記述 の中身はさして重要じゃなさそうなのでシャローコピーと仮定して function copy(o,p) { p=p || {}; o=p; } これでcopyメソッドは完成。 質問を良く見たら勘違いをしてそうだったので・・・ p=p || {}; はp=pを評価しているのではありませんよ。 =のうしろのpを評価し、trueであればpの値を、falseであれば||の後ろを代入する書き方です。
SugiuraY

2017/09/23 19:22

コメント有難うございます。 確かに勘違いをしておりました。 p || {};を左から評価して、trueならpの値を代入、さもなくばからのオブジェクトを代入なら納得です。 また、かりそめのoに関連するコードがあればcopy関数の意味として成立しそうです。 大変勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問