かなり初歩的なことで恐縮です。
次のようにして自分なりにいろいろ挑戦してみたのですが、どうしてもできません!
「空の配列」はどのように判定するのでしょうか?
コメントアウトしてあるあたり(奮闘してあるあたり笑)について、正しい書き方を教えてください。
html
1<div arr="[]"></div> 2 3<scritp> 4var arr = $('div').data('arr'); 5 6//if( arr == [""] ){ 7//if( empty(arr) ){ 8//if( arr == empty ){ 9//if( arr == null ){ 10//if( arr == '' ){ 11//if( arr !== 0 ){ 12 13 alert(' <div> の arr は空です。 '); 14}else{ 15 alert(' <div> の arr に値があります。 '); 16} 17</script>
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
「arr="[]"」属性「data('arr')」ではありません
sample
javascript
1<script> 2$(function(){ 3 console.log($('#d1').data('arr').length>0); 4 console.log($('#d2').data('arr').length>0); 5 console.log($('#d3').data('arr').length>0); 6 console.log($('#d4').data('arr').length>0); 7}); 8</script> 9<div id="d1" data-arr="[]"></div> 10<div id="d2" data-arr="[1,2,3]"></div> 11<div id="d3" data-arr="[0]"></div> 12<div id="d4" data-arr="[null]"></div>
数値をチェック
isNaNのチェックでは数値で構成される文字列を弾けません
javascript
1<script> 2$(function(){ 3 var arr=[]; 4 arr=$('#d1').data('arr').filter(function(x){return typeof x=="number";});console.log(arr); 5 arr=$('#d2').data('arr').filter(function(x){return typeof x=="number";});console.log(arr); 6 arr=$('#d3').data('arr').filter(function(x){return typeof x=="number";});console.log(arr); 7 arr=$('#d4').data('arr').filter(function(x){return typeof x=="number";});console.log(arr); 8}); 9</script> 10<div id="d1" data-arr="[]"></div> 11<div id="d2" data-arr="[1,2,3]"></div> 12<div id="d3" data-arr='["a","b","c"]'></div> 13<div id="d4" data-arr='["1",2,"c"]'></div>
投稿2019/04/05 05:00
編集2019/04/05 06:01総合スコア117715
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/05 05:16
2019/04/05 05:43 編集

0
これは初歩らしく最初の歩き方を解説した方が良いですかね。
配列周りは他言語でブイブイ言わせてる中級者でも容易にハマる難解ポイントですからね。
まずはデベロッパーツールを開きましょう。
GoogleやFirefoxならF12キー等で開けます。
コンソールのタブを開きます。
下記のようなコードならば、console.log(arr)
という行に従って、
arr
変数がこの場で何を所持しているのかが画面上に表示されるはずです。
JavaScript
1var arr = $('div').data('arr'); 2console.log(arr);
表示されましたか?
<div data-arr="[]"></div>
にHTMLを修正すれば無事取得出来てるんじゃないかと思います。
これの値は何になっていますか?
JavaScript
1console.log("[]"); 2// [] 3 4console.log([]); 5// ▶ []
本物の配列ならば展開可能を示す右矢印が表示されるはずです。
質問文の試行錯誤で使った条件式をレビューしていきましょう。
arr == [""]
JavaScriptの配列は比較演算子で比較することは不可能です。
PHPならば[] == []
はtrueになるのに、
JavaScriptの[] == []
はfalseです。
意味わかりませんね?
JavaScriptのオブジェクトや配列は、メモリ空間上に実態を作ってから、そのアドレス番地を返して来ます。
なので[] == []
はアドレス番地A == アドレス番地B
の比較になるので当然違うのでfalseとなります。
arr == empty
Uncaught ReferenceError: empty is not defined
JavaScriptはemptyという予約語はないのでエラーになります。
PHPにはemptyという関数がありましたっけ?
arr == null
JavaScriptの配列は作った時点でArrayクラスのインスタンスという存在になる為true的な存在となります。
従ってnullと比較するとfalse
arr == ''
これはあんまり良くないですが動くはずです。
質問文では<div arr=[]>
だったのでHTML5のdataではないので値が取れなかっただけです。
配列を暗黙の型変換で文字列にしようとすると
各要素をカンマ区切りにしながらの文字列になります。
ですが、[""]
は要素数1個、[]
は要素数0個なので、
何も入ってない事を証明する為にこのコードを使うのは誤りです。
arr !== 0
なんでここだけ厳密な型指定なの?
配列と数値の0はそもそも型が違うので必ずfalseになります。
この辺のJavaScriptの配列というモノの仕様の問題で、
配列が空であるか否かを判断することは困難です。
JavaScriptはオブジェクト指向言語なので
全ての値はオブジェクトであり、オブジェクトなのでプロパティやメソッドを所持しています。
Array - JavaScript | MDN
配列を示すArrayはlengthプロパティを所持しているので、
arr.length
というコードを書けば0や1等の要素数の数値が帰ってきます。
なのでarr.length === 0
という条件式で空配列ということを証明できます。
投稿2019/04/05 05:35
総合スコア21409
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
data()でとりたいならhtmlのほうの属性はdata-arr="" のように data-を接頭辞としてつける必要があります。
あとは「空の配列」なのでArray.lengthで0かどうかを判定すれば良いです。
※そもそも <scritp> と書かれているのでJavaScriptコードは認識されませんよ。
投稿2019/04/05 05:08
編集2019/04/05 05:09総合スコア80888
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
HTML
1<div data-arr="[]"></div>
jQuery
1var arr = $('div').data('arr'); 2if ($.isArray(arr) && !arr.length) { 3 // Array かつ 空。 4}
https://api.jquery.com/jQuery.isArray/
cf.
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
投稿2019/04/05 06:34
総合スコア13749
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。