たとえば 0 から 9 までの整数しか受け入れたくない場合どのような挙動が正解ですか?
- 現在の値が 5 で 15 を代入された場合
- エラー error をスロー throw
- 反映しない。破棄する。値は 5 のまま
- 範囲内におさまるように丸める。値は 9 になる
- 初期値がある場合は初期値にリセット
- 現在の値が 5 で 7.5 を代入された場合
- エラー error をスロー throw
- 反映しない。破棄する。値は 5 のまま
- 範囲内におさまるように丸める。値は切り捨てて 7 または四捨五入して 8 になる
- 初期値がある場合は初期値にリセット
- 現在の値が 5 で文字列 "a" を代入された場合
- エラー error をスロー throw
- 反映しない。破棄する。値は 5 のまま
- NaN -> false -> 0 として扱う。値は 0 になる
- length !== 0 -> true -> 1 として扱う。値は 1 になる
- 初期値がある場合は初期値にリセット
時と場合によって使い分けますか?どういう時どういう場合に何を使いますか?
言語の思想によっても異なりますか?
こんな挙動をする(こんな挙動にする)ことはありえない、とかありますか?
たとえば DOM の HTMLAnchorElement と HTMLDivElement の tabIndex で試したところ次のような結果になりました(Chrome と Firefox とで同じ結果でした)
javascript
1const setTabIndex = (tagName, value) => { 2 const element = document.createElement(tagName) 3 const defaultValue = element.tabIndex 4 element.tabIndex = value 5 console.log(`tagName: "${tagName}", defaultValue: "${defaultValue}", setValue: "${value}", resultValue: "${element.tabIndex}"`) 6} 7setTabIndex('a', 7.5) //tagName: "a", defaultValue: "0", setValue: "7.5", resultValue: "7" 8setTabIndex('a', 'a') //tagName: "a", defaultValue: "0", setValue: "a", resultValue: "0" 9setTabIndex('a', NaN) //tagName: "a", defaultValue: "0", setValue: "NaN", resultValue: "0" 10setTabIndex('a', Infinity) //tagName: "a", defaultValue: "0", setValue: "Infinity", resultValue: "0" 11setTabIndex('a', -Infinity) //tagName: "a", defaultValue: "0", setValue: "-Infinity", resultValue: "0" 12setTabIndex('a', true) //tagName: "a", defaultValue: "0", setValue: "true", resultValue: "1" 13setTabIndex('a', false) //tagName: "a", defaultValue: "0", setValue: "false", resultValue: "0" 14setTabIndex('div', 7.5) //tagName: "div", defaultValue: "-1", setValue: "7.5", resultValue: "7" 15setTabIndex('div', 'a') //tagName: "div", defaultValue: "-1", setValue: "a", resultValue: "0" 16setTabIndex('div', NaN) //tagName: "div", defaultValue: "-1", setValue: "NaN", resultValue: "0" 17setTabIndex('div', Infinity) //tagName: "div", defaultValue: "-1", setValue: "Infinity", resultValue: "0" 18setTabIndex('div', -Infinity) //tagName: "div", defaultValue: "-1", setValue: "-Infinity", resultValue: "0" 19setTabIndex('div', true) //tagName: "div", defaultValue: "-1", setValue: "true", resultValue: "1" 20setTabIndex('div', false) //tagName: "div", defaultValue: "-1", setValue: "false", resultValue: "0"
tabIndex は次のようなルールのようです
- 整数値を受け付ける(小数点以下は切り捨て)
- 既定値は 0
- 指定されなかった場合(不正な値が指定された場合?)は既定値になる
- HTMLDivElement などフォーカスを持たない要素はあらかじめ -1 がセットされている
- ( true が 1 に false が 0 になるのは JavaScript のルール?)
https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes/tabindex
エラーは発生させないのが一般的ですか?
不正な値が指定された場合は既定値があれば既定値になるのが一般的ですか?
回答3件
あなたの回答
tips
プレビュー