Object.prototype.toString.call(currentFruit)===“[object Date]”

时间:2013-09-19 01:42:59

标签: javascript jquery html css javascript-events

我是js的新手.. 我有一个if条件,因为我不理解if条件 你可以告诉我,如果情况如此...... Object.prototype.toString.call(currentFruit)===“[object Date]” 你能解释一下吗...... 提供我的代码

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;
},

2 个答案:

答案 0 :(得分:7)

让我们分解一下;

因此Object.prototype.toString.call(currentFruit)正在调用toString上所有对象的原生currentFruit。如果currentFruit.toString()定义或继承了另一个toString,则可能与currentFruit不同。

Object.prototype.toString返回[object X]形式的 String ,其中Xthis类型,所以将[object Date]===进行比较,询问currentFruit日期?”

为什么这项检查比typeof更有用?因为typeof通常会返回"object",这通常不会有用。

instanceof怎么样?如果您要检查的内容也会继承您正在测试的内容,那么这将是true,例如,x instanceof Object通常是true,这也不总是有用。

您可以认为类似的另一种方法是测试 Object 构造函数x.constructor === Date。这有一组不同的问题,例如throw错误,如果x 未定义 null ,那么需要更多检查等等但它可以如果您正在使用非本机构造函数,那么toString只会给[object Object]


所有这些都说明了,考虑到你正在使用的环境,你需要考虑这个测试是否真实。目前, Date 没有标准的 JSON 表示。

答案 1 :(得分:2)

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

它很容易被currentFruit instanceof Date取代(尽管存在细微差别)。