3

我是 js 新手 .. 我有一个 if 条件,因为我不明白 if 条件你能告诉我这个 if 条件有什么作用吗... Object.prototype.toString.call(currentFruit) === "[对象日期]” 你能解释一下吗...在下面提供我的代码

setcurrentFruit: function (fruitName, currentFruit) {
    WorklistStorage.set(fruitName, currentFruit, false);
},
getcurrentFruit: function (fruitName) {
    var currentFruit = unescapeJSON(WorklistStorage.get(fruitName, false));
    if (currentFruit == "undefined" || typeof currentFruit == "undefined" || Object.prototype.toString.call(currentFruit) === "[object Date]") {
        var date = new Date();
        currentFruit = date.toString();
        wholeQueue.setcurrentFruit(fruitName, currentFruit);
        //console.log("poppppp");
    }
    currentFruit = new Date(currentFruit);
    return currentFruit;
},
4

2 回答 2

7

让我们分解一下;

Object.prototype.toString.call(currentFruit)调用toString所有对象的本机也是如此currentFruit。这可能与在上定义或继承的currentFruit.toString()另一个不同。toStringcurrentFruit

Object.prototype.toString返回类型为where的String,因此与with比较是询问“Is a Date ?[object X]Xthis[object Date]===currentFruit

为什么做这个检查比 更有用typeof?因为typeof通常会返回"object",这通常没有帮助。

怎么样instanceof?如果true您正在检查的东西也继承自您正在测试的东西,例如,x instanceof Object通常是true,这也并不总是有帮助。

您可以认为类似的另一种方法是测试Object构造函数。. 这有一组不同的问题,例如ing 错误 if is undefinednull因此需要更多检查等,但如果您使用非本机构造函数,它可能会更有帮助,因为它会简单地给出.x.constructor === DatethrowxtoString[object Object]


综上所述,您需要考虑考虑到您正在使用的环境,这个测试是否会成为真的。目前没有Date的标准JSON表示。

于 2013-09-19T02:17:50.893 回答
1

Object.prototype.toString用于获取 javascript 对象的内部 [[Class]] 值。在这里,它测试是否currentFruit是原生Date对象。

它可以很容易地被替换currentFruit instanceof Date(尽管有细微的差别)。

于 2013-09-19T01:53:56.033 回答