私はこの質問を見ましたが、JavaScript固有の例を見ませんでした。string.Empty
JavaScriptで利用できるシンプルなものはありますか、それとも単なるチェックのケース""
ですか?
私はこの質問を見ましたが、JavaScript固有の例を見ませんでした。string.Empty
JavaScriptで利用できるシンプルなものはありますか、それとも単なるチェックのケース""
ですか?
回答:
値があるかどうかを確認したいだけの場合は、
if (strValue) {
//do something
}
nullに対して空の文字列を具体的にチェックする必要がある場合""
は、===
演算子を使用してチェックするのが最善の策だと思います(実際には、比較対象の文字列であることを確認するため)。
if (strValue === "") {
//...
}
=== ''
対.length
任意の識別可能な改善を示さなかった(と使用して.length
、あなたが文字列を持っていると仮定することができます動作する場合のみ)
文字列が空、null、または未定義であるかどうかを確認するために、私は次のように使用します。
function isEmpty(str) {
return (!str || 0 === str.length);
}
文字列が空白、null、または未定義であるかどうかを確認するには、次のように使用します。
function isBlank(str) {
return (!str || /^\s*$/.test(str));
}
文字列が空白か、空白のみが含まれているかを確認するには:
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
if (variable == constant value)
、 '='を忘れた場合は、テストする代わりに定数値を変数に割り当てます。ifで変数を割り当てることができるため、コードは引き続き機能します。したがって、この条件を記述するより安全な方法は、定数値と変数を逆にすることです。この方法でコードをテストすると、エラーが表示されます(割り当ての無効な左辺)。JSHintなどを使用して、条件での割り当てを禁止し、作成時に警告することもできます。
/^\s*$/.test(str)
本当に読みにくいのは残念です-おそらくより単純なコードまたは正規表現を使用してスペースを削除する方が良いでしょうか?stackoverflow.com/questions/6623231/…を参照してください。また、stackoverflow.com
if blue is the sky
ます。dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
以前のすべての答えは良いですが、これはさらに良いでしょう。!!
(not not)演算子を使用します。
if(!!str){
// Some code here
}
または型キャストを使用します:
if(Boolean(str)){
// Code here
}
どちらも同じ機能を果たします。変数をブール値に型キャストしますstr
。ここで、は変数です。
それは返すfalse
ためにnull,undefined,0,000,"",false
。文字列「0」と空白「」に対して
返さtrue
れます。
if(str)
ありif(!!str)
ますか?
var any = (!!str1 && !!str2 && !!str3)
そこに数値がある場合の処理
!!str.trim()
文字列が空白のみで構成されていないことを確認します。
Boolean(str)
が、はるかに読みやすく、「wtfish」が少なくなっています。
あなたが得ることができる最も近いものはstr.Empty
(strが文字列であることを前提条件として)です:
if (!str.length) { ...
str.Empty
。
文字列が単なる一連の空のスペースではないことを確認する必要がある場合(これはフォームの検証用であると想定しています)、スペースを置き換える必要があります。
if(str.replace(/\s/g,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
私が使う:
function empty(e) {
switch (e) {
case "":
case 0:
case "0":
case null:
case false:
case typeof(e) == "undefined":
return true;
default:
return false;
}
}
empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
return ""
})) // false
typeof
中にはswitch
私のために動作しませんでした。私はif (typeof e == "undefined")
テストを追加し、それは動作します。どうして?
case undefined:
代わりに使用できcase typeof(e) == "undefined":
ますか?
lodash:_.isEmpty(value)を使用できます。
それはのような例多くをカバーし{}
、''
、null
、undefined
など、
しかし、JavaScriptプリミティブデータ型の場合、またはその両方が常に返さtrue
れます。Number
_.isEmpty(10)
_.isEmpty(Number.MAX_VALUE)
true
_.isEmpty(" "); // => false
" "
は空ではないため。_.isEmpty("");
trueを返します。
関数:
function is_empty(x)
{
return (
(typeof x == 'undefined')
||
(x == null)
||
(x == false) //same as: !x
||
(x.length == 0)
||
(x == "")
||
(x.replace(/\s/g,"") == "")
||
(!/[^\s]/.test(x))
||
(/^\s*$/.test(x))
);
}
PS:JavaScriptでは、後に改行を使用しないでくださいreturn
。
if
ステートメントにまとめても意味がありません。
試してください:
if (str && str.trim().length) {
//...
}
str.trim().length
str.trim()
私自身のテスト結果によると、よりも速く、約1%です。
if (!str) { ... }
最も効率的な方法についてはあまり心配しません。あなたの意図に最も明確なものを使用してください。私にとってそれは通常strVar == ""
です。
Constantinからのコメントのとおり、strVarが整数0の値を含む可能性がある場合、それは実際に意図を明確にする状況の1つになります。
たくさんの答え、そしてたくさんの異なる可能性!
迅速かつ簡単な実装で間違いなく勝者は次のとおりです。 if (!str.length) {...}
ただし、他の多くの例が利用可能です。これに対処するための最良の機能的方法は、次のように提案します。
function empty(str)
{
if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
{
return true;
}
else
{
return false;
}
}
少し過剰だと思います。
str.length === 0
仮パラメータを持たない関数に対してはtrueを返します。
選択した18のソリューションに対してmacOS v10.13.6(High Sierra)でテストを実行します。ソリューションは、以下のスニペットに示されているように(コーナーケースの入力データの場合)少し異なります。
結論
!str
、==
、===
およびlength
すべてのブラウザ(A、B、C、G、I、J)のために高速でありますtest
、replace
)でありcharAt
、すべてのブラウザー(H、L、M、P)で最も遅い以下のスニペットでは、さまざまな入力パラメーターを使用して、選択した18のメソッドの結果を比較しています
""
"a"
" "
-空の文字列、文字付きの文字列とスペース付きの文字列[]
{}
f
-配列、オブジェクト、関数0
1
NaN
Infinity
-数字true
false
-ブールnull
undefined
テストされたすべてのメソッドがすべての入力ケースをサポートするわけではありません。
そして、すべての方法についてstr = ""
、ブラウザーChrome v78.0.0、Safari v13.0.4、Firefox v71.0.0の速度テストケースを実行します- ここでマシンのテストを実行できます
var a;
存在することを確認してくださいfalse spaces
値をトリムしてから、テストしますemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}
普段はこんな感じで
if (!str.length) {
// Do something
}
typeof variable != "undefined"
空かどうかを確認する前に確認できます。
文字列にnull文字が含まれる可能性を考慮した回答に気づきませんでした。たとえば、null文字列がある場合:
var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted
nullをテストするには、次のようにします。
String.prototype.isNull = function(){
return Boolean(this.match(/^[\0]*$/));
}
...
"\0".isNull() // true
null文字列と空の文字列で機能し、すべての文字列でアクセスできます。さらに、他のJavaScriptの空文字または空白文字(つまり、改行なしスペース、バイトオーダーマーク、行/段落区切り文字など)を含むように拡張できます。
一方、null、undefined、 ''、 ''、{}、[]などのすべての「空」をチェックする1つの関数を使用できます。だから私はこれを書いた。
var isEmpty = function(data) {
if(typeof(data) === 'object'){
if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
return true;
}else if(!data){
return true;
}
return false;
}else if(typeof(data) === 'string'){
if(!data.trim()){
return true;
}
return false;
}else if(typeof(data) === 'undefined'){
return true;
}else{
return false;
}
}
ユースケースと結果。
console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty(' ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false
現在のところ、文字列が空かどうかを確認するためのstring.emptyのような直接的なメソッドはありません。ただし、コードでは、次のような空の文字列のラッパーチェックを使用できます。
// considering the variable in which your string is saved is named str.
if (str && str.length>0) {
// Your code here which you want to run if the string is not empty.
}
これを使用して、文字列が未定義またはnullでないことも確認できます。未定義、null、空の3つは異なることを覚えておいてください。
let rand = ()=>Math.random()
からrand && rand.length > 0)
false を返しますが、明らかにfnは「空」ではありません。つまり、フォーマットパラメータのない関数に対してはfalseを返します。
Math.random()
は文字列ではなく数値を返します。そして、この答えは弦についてです。;-)
これらの答えはすべていいです。
しかし、変数が文字列であり、スペースだけが含まれているわけではなく(これは私にとって重要です)、 '0'(文字列)が含まれている可能性があります。
私のバージョン:
function empty(str){
return !str || !/[^\s]+/.test(str);
}
empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty(" "); // true
jsfiddleのサンプル。
empty(0)
とempty(7)
同じ値を返す必要があります。
empty("0")
返さなければならないfalse
(それはない、空の文字列であるため)が、empty(0)
返す必要がありtrue
、それは:)空のため
empty
、この場合は誤解を招く名前になります。
empty
はいいと思います。空の関数のPHPドキュメント:この関数とReturns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
の違いPHP
-その文字列'0'
は空として識別されません。
empty
は不正確で誤解を招く名前です。PHPにも貧弱な名前のempty
関数があることは興味深いですが、PHPの障害はJavaScriptとは何の関係もありません。
ここで良い答えが見つかりませんでした(少なくとも私に適した答えではありません)
だから私は自分自身に答えることに決めました:
value === undefined || value === null || value === "";
定義されていないかどうかを確認する必要があります。そうしないと、メソッドが爆発し、nullと等しいか空の文字列と等しいかどうかを確認できます。
持てない!! またはif(value)
、チェック0
した場合にのみ、誤った答えが返されます(0は偽)。
そうは言っても、次のような方法でまとめてください。
public static isEmpty(value: any): boolean {
return value === undefined || value === null || value === "";
}
PS .: typeofをチェックする必要はありません。メソッドに入る前でも爆発してスローされるからです。
これを試して
str.value.length == 0
"".value.length
エラーが発生します。それはする必要がありますstr.length === 0
TypeError
If str
が等しいundefined
か、またはnull
JavaScriptのネイティブのStringオブジェクトに簡単に追加して、繰り返し再利用する
ことができます... 空の文字列をチェックしたい場合は、以下のコードのような簡単なもので十分です。''
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.length);
}
そうでない場合、''
空の文字列と' '
スペース付きの両方をチェックしたい場合は、trim()
以下のコードのように、を追加するだけでそれを行うことができます。
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.trim().length);
}
このように呼び出すことができます:
''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
!(!!this.length)
単に!this
(または!this.trim()
2番目のオプション)ではなく、実行することにはどのような利点がありますか?長さ0の文字列は既に誤りであり、括弧は冗長であり、3回否定することは1回否定することとまったく同じです。
文字列でも空でもヌルでもない値をテスター関数に渡した場合にどうなるかについて、いくつかの調査を行いました。多くの人が知っているように、(0 == "")はJavaScriptではtrueですが、0は値であり、空でもnullでもないので、テストすることをお勧めします。
次の2つの関数は、未定義、null、空/空白の値に対してのみtrueを返し、数値、ブール値、オブジェクト、式など、その他すべてに対してfalseを返します。
function IsNullOrEmpty(value)
{
return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
return (value == null || !/\S/.test(value));
}
より複雑な例が存在しますが、これらは単純で一貫した結果を提供します。(value == null)チェックに含まれているため、未定義をテストする必要はありません。次のようにStringに追加することで、C#の動作を模倣することもできます。
String.IsNullOrEmpty = function (value) { ... }
Stringクラスのインスタンスがnullの場合はエラーになるため、これをStringsプロトタイプに含めたくありません。
String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error
次の値の配列でテストしました。疑わしい場合は、ループして関数をテストできます。
// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
['undefined', undefined],
['(var) z', z],
['null', null],
['empty', ''],
['space', ' '],
['tab', '\t'],
['newline', '\n'],
['carriage return', '\r'],
['"\\r\\n"', '\r\n'],
['"\\n\\r"', '\n\r'],
['" \\t \\n "', ' \t \n '],
['" txt \\t test \\n"', ' txt \t test \n'],
['"txt"', "txt"],
['"undefined"', 'undefined'],
['"null"', 'null'],
['"0"', '0'],
['"1"', '1'],
['"1.5"', '1.5'],
['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
['comma', ','],
['dot', '.'],
['".5"', '.5'],
['0', 0],
['0.0', 0.0],
['1', 1],
['1.5', 1.5],
['NaN', NaN],
['/\S/', /\S/],
['true', true],
['false', false],
['function, returns true', function () { return true; } ],
['function, returns false', function () { return false; } ],
['function, returns null', function () { return null; } ],
['function, returns string', function () { return "test"; } ],
['function, returns undefined', function () { } ],
['MyClass', MyClass],
['new MyClass', new MyClass()],
['empty object', {}],
['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];
isEmpty()
メソッドはありません。タイプと長さを確認する必要があります。
if (typeof test === 'string' && test.length === 0){
...
型チェックは、test
is undefined
またはの実行時エラーを回避するために必要ですnull
。