Gus*_*avo 6 javascript null ecmascript-5
我在测试某些变量是否为空时遇到了代码问题,并决定用小提琴测试它:
var result = "";
var Teste = new Object();
Teste.ObjectNew = new Object();
Teste.StringNew = new String();
Teste.NumberNew = new Number();
Teste.ArrayNew = new Array();
Teste.ObjectLiteral = {};
Teste.StringLiteral = "";
Teste.NumberLiteral = 0;
Teste.ArrayLiteral = [];
Teste.ObjectNull = Object(null);
Teste.StringNull = String(null);
Teste.NumberNull = Number(null);
Teste.ArrayNull = [null];
for (var i in Teste) {
if (Teste[i] == null) {
result += "<p>Type " + i + " is null: " + Teste[i] + "</p>";
} else {
result += "<p>Type " + i + " is not null: " + Teste[i] + "</p>";
}
}
document.getElementById("result").innerHTML = result;Run Code Online (Sandbox Code Playgroud)
<div id="result"></div>Run Code Online (Sandbox Code Playgroud)
结果是:
Type ObjectNew is not null: [object Object]
Type StringNew is not null:
Type NumberNew is not null: 0
Type ArrayNew is not null:
Type ObjectLiteral is not null: [object Object]
Type StringLiteral is not null:
Type NumberLiteral is not null: 0
Type ArrayLiteral is not null:
Type ObjectNull is not null: [object Object]
Type StringNull is not null: null
Type NumberNull is not null: 0
Type ArrayNull is not null:
Run Code Online (Sandbox Code Playgroud)
我在Safari中测试过,结果相同.
我在php中完全使用JS进行编码,并且在调整我的想法时遇到了问题.在php中,$ var = array()返回NULL,但在JavaScript中它接缝在任何类型都不会有null值.在EcmaScript定义中,null是"表示故意缺少任何对象值的原始值",但是在我的测试列表中,它在JavaScript中不可能连接,不包括我认为是Null类型的var的v = null的情况.
另外,我相信AS3遵循ecmascript概念,通过拆分类型从它的值开始,var语句"构建"var作为除了值之外的对象.
那么,如果有办法,我们如何正确引用空值?
编辑
当我遇到这种情况时,我做了这个测试:我创建了一个具有图形库相对目录的变量.如果此变量为null,则表示我不希望在软件初始化阶段将其从默认值(我有一个默认值的表)更改,因此系统只需为目录添加正确的http基础.如果变量不为null,则假定该值仅分配给它.但如果它是一个空的空间,则表示该目录是根目录,但将被视为空,从而产生错误.
Dinamyc:
var dir = new String(); // should be null
// initializing
dir = ""; // the directory will be the root
// finish ini
if(dir==null) … // assume the default value, but this doesn't work, so how can I know?
Run Code Online (Sandbox Code Playgroud)
在 EcmaScript 定义中,null 是“表示故意不存在任何对象值的原始值”,但根据我的测试,它在 JavaScript at list 中似乎是不可能的,除了 v = null 的情况,我认为它是 Null 类型的 var。
好吧,您测试中的所有测试用例都有一个value。我不确定你为什么排除
Teste.Null = null;
Run Code Online (Sandbox Code Playgroud)
但它会起作用的。另外, aTeste.Undefined = undefined会被比较为等于null。
Teste.Null = null;
Run Code Online (Sandbox Code Playgroud)
var result = "";
var Teste = {
Null: null,
Undefined: undefined,
ObjectNew: new Object(),
StringNew: new String(),
NumberNew: new Number(),
ArrayNew: new Array(),
ObjectLiteral: {},
StringLiteral: "",
NumberLiteral: 0,
ArrayLiteral: [],
ObjectNull: Object(null),
StringNull: String(null),
NumberNull: Number(null),
ArrayNull: [null]
}
for (var i in Teste) {
result += "<p>Type "+i+" is"+(Teste[i] == null?"":" not")+" null: "+Teste[i]+"</p>";
}
document.getElementById("result").innerHTML = result;Run Code Online (Sandbox Code Playgroud)
那么,如果有办法的话,我们如何正确引用空值呢?
使用该值null。不要将它包裹在任何东西中,否则你会在它周围得到一个包装器(例如你的 array [null])。
如果您想测试数组 ( []) 或字符串 ( "") 是否为空(这与值不存在是不同的概念),您应该检查它们是否.length为0。
Run Code Online (Sandbox Code Playgroud)var dir = new String(); // should be null
不。您已经在此处的空字符串(您似乎不想要)周围创建了一个 Wrapper 对象(您永远不需要该对象)。要声明一个变量,但不初始化它,只需使用
var dir;
Run Code Online (Sandbox Code Playgroud)
或者
var dir = null;
Run Code Online (Sandbox Code Playgroud)
然后它们将具有值undefinedor null,这两个值都== null在您的 if 条件中。
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |