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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

594閲覧

JavaScriptの`location`オブジェクトで、`_display`とは何か?

milmilmimi

総合スコア7

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

2クリップ

投稿2020/03/15 09:30

編集2020/03/15 09:31

JavaScriptのlocationオブジェクトについて、pathname_displayと入るこれは一体どういう意味でなんの役に立つのでしょうか?

javascript

1// urlを与えてlocationオブジェクトを得る 2var parse_url = function( url ){ 3 var r = {}; 4 var re = /^(?:(https?:)?(?://(([^/:]+)(?::([0-9]+))?)))?(/?[^?#]*)(??[^?#]*)(#?.*)/; 5 var p = 'protocol host hostname port pathname search hash'.split(' '); 6 var m = String( url ).match( re ); 7 if( m ) { 8 p.forEach(function( prop, idx ){ 9 r[prop] = typeof m[(idx+1)] === 'undefined' ? null: m[(idx+1)]; 10 }); 11 } 12 // 相対指定でない(絶対指定、プロトコル略記、ホストルート記述のとき) 13 if( r.pathname.indexOf('.') !== 0 ){ 14 p.forEach(function( prop ){ 15 if( r[prop] === '' ) r[prop] = location[prop]; 16 }); 17 } 18 return r; 19}; 20 21// 普通にlocationオブジェクトを取得 22console.log('locationの値',location); 23 24// 関数で取得 25var url = 'http://example.com'; 26var mylocation = parse_url(url); 27console.log('mylocationの値',mylocation);

上記で最後から3行目のvar urlですが、この最後に/があるときはmylocationpathnameの値は/になるのですが、

しかし最後に/がないときはpathnameの値は_displayになりまして、これが何なのかよくわかりません。

どういうものでしょうか?

実用的にはホームかどうか判定したいときに下記としていますが、勝手に入る_displayに対応するこの条件に気持ち悪さを感じています。

javascripot

1var paths = mylocation.pathname.split('/'); 2const page = paths[1] == '_display' || paths[1] == '/' || !paths[1] ? 'home' : paths[1]; 3console.log('pageの値',page);

MDNを見ても載っていないですし、どなたかご説明できる方いらっしゃいますでしょうか。

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

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

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

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

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

miyabi_takatsuk

2020/03/15 11:20

第三者では再現されないかと。 実行環境、URLも記載ください。 そして、ユーザー定義関数の事なので、そりゃMDNには載ってるわけありません。 最後に、おそらくその関数の使い方をそもそも間違えているかと・・・。 おそらく引数に入れるのは文字列ではありません。
m.ts10806

2020/03/16 01:26

このコードの出典を明示してください。
guest

回答1

0

最後に/がないときはpathnameの値は_displayになりまして、これが何なのかよくわかりません。

回答訂正)

ブラウザの開発者コンソールで実行する限りにおいては、parse_url("/_display") を与えない限り、再現できません(他の javascriptコードの干渉がない限り、parse_url() で得られる結果の locationオブジェクトのpathname プロパティが /_displayとはならないはずです)。

勝手に入る_displayに対応するこの条件に気持ち悪さを感じています

もしNodeJSベースで稼働するエディタをご利用であれば、エディタがデバッグ用のサーバに渡す際に location が書き換わっていないかなど、原因となりそうな事象はあるように思います。

ブラウザplatformlocation.pathname
Edge 最新win10"/spartan/dhp"
Chrome 80.0.3987.132win10"/local-ntp.html"
Firefox 74.0(64ビット)win10"newtab"
Cromium 72.0.3626.121RaspberryPi2B+"/_/chrome/newtab"

/_displayになる事例がないか、僅かですが、ブラウザ標準のホーム画面を調べてみました。

訂正ここまで)


ブラウザ側でURL解析の際、サーバー上のディレクトリなのかファイルなのかを判別する手段としてスラッシュの有無を用いているのだと思います。

  • 基本的には「サーバー要求してみないと、ファイルなのかディレクトリなのかわからない。」
  • サーバー要求はレイテンシの無駄になる

ということで、以下のように決め打ちしているのではないでしょうか。

  1. pathnameの最後にスラッシュ記号がある場合はサーバー上のディレクトリとする
  2. pathnameの最後にスラッシュ記号がない場合はファイルとする

追記)
ユーザ関数の場合は、仕様は「書かれているコードそのもの」ですので、気になる場合は
console.log() を書き加えて、挙動の一つ一つを確かめるのが確実です。

javascript

1 var m = String( url ).match( re ); 2console.log( m ); // ここを調査してみるなど 3 if( m ) {

投稿2020/03/16 01:18

編集2020/03/16 06:00
AkitoshiManabe

総合スコア5432

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問