标签: null-check

如何检查变量是否为空?

我知道以下是JavaScript中检查变量是否不是的两种方法null,但我很困惑哪种方法最好使用.

我应该这样做:

if (myVar) {...}
Run Code Online (Sandbox Code Playgroud)

要么

if (myVar !== null) {...}
Run Code Online (Sandbox Code Playgroud)

javascript comparison null-check

261
推荐指数
5
解决办法
45万
查看次数

JavaScript null检查

我遇到过以下代码:

function test(data) {
    if (data != null && data !== undefined) {
        // some code here
    }
}
Run Code Online (Sandbox Code Playgroud)

我对JavaScript很新,但是,从我在这里读过的其他问题来看,我的印象是这段代码没有多大意义.


特别是,这个答案说明了这一点

如果在除了以外的任何上下文中访问未定义的变量,您将收到错误typeof.

更新:上述答案(引用)可能会产生误导.应该说"一个未声明的变量",而不是"一个未定义的变量".

正如我在Ryan♦,maericsnwellnhof的回答中所发现的那样,即使没有为函数提供参数,也始终声明其参数的变量.这个事实也证明了下面列表中的第一项是错误的.


根据我的理解,可能会遇到以下情况:

  • 调用该函数时没有参数,从而生成data一个未定义的变量,并引发错误data != null.

  • 该函数专门用null(或undefined)作为其参数调用,在这种情况下data != null已经保护内部代码,使得&& data !== undefined无用.

  • 该函数使用非null参数调用,在这种情况下,它将平凡地传递两个data != null data !== undefined.

问:我的理解是否正确?


我在Firefox的控制台中尝试了以下内容:

--
[15:31:31.057] false != null
[15:31:31.061] true
-- …
Run Code Online (Sandbox Code Playgroud)

javascript null undefined null-check

158
推荐指数
4
解决办法
42万
查看次数

将泛型与null相比较,可以是值或引用类型?

public void DoFoo<T>(T foo) where T : ISomeInterface<T>
{
    //possible compare of value type with 'null'.
    if (foo == null) throw new ArgumentNullException("foo");
}
Run Code Online (Sandbox Code Playgroud)

我故意只检查null,因为我不想限制a ValueType等于它default(T).我的代码以这种方式编译和工作(ReSharper抱怨,但不是CodeAnalysis).虽然我想知道:

  • 有没有更标准的方法来处理这种情况?
  • 有没有可能出现这个问题?
  • 当我打电话并传递值类型时,真正发生了什么?

c# generics null value-type null-check

41
推荐指数
2
解决办法
4837
查看次数

通过“myPtr &gt; 0”检查空指针

在一些遗留代码中,我遇到了以下空指针检查

if( myPtr > 0 ) {
...
}
Run Code Online (Sandbox Code Playgroud)

通过此 if 检查检查空指针是否存在任何技术风险?

c++ comparison null null-pointer null-check

33
推荐指数
2
解决办法
3042
查看次数

C#:如何对动态对象执行空检查

如何对动态对象执行空检查

伪代码:

public void Main() {
    dynamic dynamicObject = 33;
    if(true) { // Arbitrary logic
        dynamicObject = null;
    }
    Method(dynamicObject);
}

public void Method(dynamic param) {
    // TODO: check if the content of 'param' is equal to null
}
Run Code Online (Sandbox Code Playgroud)

c# dynamic null-check

25
推荐指数
1
解决办法
2万
查看次数

空或空检查字符串变量

if((isnull(@value,''))='')
Run Code Online (Sandbox Code Playgroud)

我想知道上面的代码是否可以检查变量是null还是空.

sql null sql-server-2008 null-check

22
推荐指数
3
解决办法
14万
查看次数

C#,多个==运算符重载,没有模糊的空值检查

简介:
我有一些类可以完成相同的工作,但具有不同的值类型(例如浮点数或整数的向量).
现在我希望能够检查相等性,这种相等性也应该在类型之间起作用(例如vectorF == vectorI).
此外,应该可以进行空检查(vectorF == null).

方法:
我的方法是为==和!=运算符创建多个重载,每个可能的组合一个.

public sealed class VectorF
{
    [...]

    public static bool operator == (VectorF left, VectorI right)
    {
        // Implementation...
    }

    public static bool operator == (VectorF left, VectorF right)
    {
        // Implementation...
    }

    // Same for != operator
    [...]
}
Run Code Online (Sandbox Code Playgroud)

问题:
使用多个重载,我不能只使用==运算符进行空检查,因为调用将是不明确的.

var v = new VectorF([...]);

if (v == null)    // This call is ambiguous
[...]
Run Code Online (Sandbox Code Playgroud)

我知道有可能使用ReferenceEquals或null cast,但这种方法对我来说是一个严重的限制.

var v = new VectorF([...]);

if(object.ReferenceEquals(v, null))    // Would …
Run Code Online (Sandbox Code Playgroud)

c# operator-overloading null-check

18
推荐指数
2
解决办法
2151
查看次数

javax.annotation.Nonnull vs assert

我在方法参数上使用Findbugs和javax.annotation.Nonnull.

在私有方法上,我通常添加一个断言行来检查null

private void myMethod(@Nonnull String str) {
    assert str != null
    ....
Run Code Online (Sandbox Code Playgroud)

最新的Netbeans版本(7.3rc2)报告断言检查不是必需的(因为Nonnull注释).我不完全确定这是一个Netbeans错误.

可以删除断言行,因为我指定了@Nonnull注释吗?

据我所知,注释仅在静态分析期间使用,而assert在启用时在执行期间处于活动状态,因此两个不是替代.

java assert findbugs null-check

14
推荐指数
2
解决办法
2万
查看次数

如何使用C API检查SQLite列中的值是否为NULL?

我正在使用带有C API的SQLite.在C API上,我可以检查具有sqlite3_column_*函数的列的结果值.问题是对于值的情况没有功能NULL.当然,我可以通过sqlite3_column_bytes函数检查值,但它可能会导致转换,我想完全避免转换.

如何检查一行中的值是否为NULL?

c sqlite null null-check

13
推荐指数
1
解决办法
7990
查看次数

用于NonNull Lombok构建器属性的FindBugs检测器

我有很多@NonNull使用Lombok构建器的字段.

@Builder
class SomeObject {
    @NonNull String mandatoryField1;
    @NonNull String mandatoryField2;
    Integer optionalField;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这为调用者提供了在不设置a的情况下创建对象的选项mandatoryField,在使用时会导致运行时失败.

SomeObject.builder()
          .mandatoryField1("...")
          // Not setting mandatoryField2
          .build();
Run Code Online (Sandbox Code Playgroud)

我正在寻找在构建时捕获这些错误的方法.

有一些非Lombok方式,如StepBuilders,甚至是构造函数,以确保始终设置必填字段,但我对使用Lombok构建器实现此目的的方式感兴趣.

另外,我理解@AllArgsConstructor为了进行编译时检查而设计类(比如一个步骤构建器或者一个)会产生很多笨拙的代码 - 这就是为什么我有动力构建一个后编译的FindBugs步骤来检测这些.

现在,当我明确地将@NonNull字段设置为时,FindBugs确实失败了null:

FindBugs检测到此失败,

new SomeObject().setMandatoryField1(null);
Run Code Online (Sandbox Code Playgroud)

但它没有检测到这个:

SomeObject.builder()
          .mandatoryField1(null)
          .build();
Run Code Online (Sandbox Code Playgroud)

它也没有发现这个:

SomeObject.builder()
          .mandatoryField1("...")
          //.mandatoryField2("...") Not setting it at all.
          .build();
Run Code Online (Sandbox Code Playgroud)

这似乎正在发生,因为Delomboked构建器看起来像,

public static class SomeObjectBuilder {
    private String mandatoryField1;
    private String mandatoryField2;
    private Integer optionalField;

    SomeObjectBuilder() {}

    public SomeObjectBuilder mandatoryField1(final String mandatoryField1) {
        this.mandatoryField1 …
Run Code Online (Sandbox Code Playgroud)

java findbugs builder lombok null-check

13
推荐指数
2
解决办法
693
查看次数