相关疑难解决方法(0)

什么是鸭子打字?

我在网上阅读随机主题时遇到了鸭子打字这个术语,并没有完全理解它.

什么是"鸭子打字"?

programming-languages duck-typing

388
推荐指数
7
解决办法
11万
查看次数

在Javascript中区分数组和"哈希"

为了使我的一个函数的语法更好,我需要能够判断一个特定的参数是一个数组还是"哈希"(我知道它只是对象).

Typeof不起作用,因为它们都返回相同的东西

typeof {foo:"bar"} // Object

typeof ["foo","bar"] // Object

那么我如何区分这两者呢?

我知道这有效,但我希望有更好的方法

({foo:"bar"}).constructor // Object()

(["foo","bar"]).constructor // [ undefined ]

编辑 啊,似乎[firebug中的[undefined]与Array是一样的.有点奇怪.

javascript

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

为什么使用typeof来识别函数?

是否有任何重要的使用理由

typeof variable === 'function'
Run Code Online (Sandbox Code Playgroud)

!!variable.call
Run Code Online (Sandbox Code Playgroud)

用于检测变量是否是函数?

除了显而易见的人之外可能会创建一个对象:

{ call: 1 }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是

typeof /regex/ === 'function'
Run Code Online (Sandbox Code Playgroud)

返回true,但是

!!/regex/.call
Run Code Online (Sandbox Code Playgroud)

返回false

javascript

8
推荐指数
2
解决办法
4857
查看次数

为什么这个可配置属性不可删除?

可配置属性似乎是可删除的:

var o = {};
Object.defineProperty(o, 'prop', {
    configurable: true,
    value: 'val'
});
delete o.prop; // true
o.prop;        // undefined
Run Code Online (Sandbox Code Playgroud)

但它在以下情况下不起作用,至少在Firefox和Chrome上是这样的:

var form = document.createElement('form'),
    input = document.createElement('input');
form.appendChild(input);
var elems = form.elements;
Object.getOwnPropertyDescriptor(form, 0)
      .configurable; // true <?????????????????????? !!!
delete elems[0];     // false                         ?
elems[0];            // input                         ?
(function(){ 'use strict'; //                         V
    delete elems[0]; // TypeError: property 0 is non-configurable
})();                // and can't be deleted
Run Code Online (Sandbox Code Playgroud)

但这似乎与规范相矛盾.

delete运营商的定义是这样的:

11.4.1 - 删除操作员

生产UnaryExpression:delete UnaryExpression …

javascript properties ecma262 language-lawyer

7
推荐指数
1
解决办法
269
查看次数

什么是`delete`在JavaScript中非常有用的用例?

我们在这里有一些问题以更抽象的方式讨论删除,但我正在寻找delete可以使用何时使用的实际示例,而不是做一些事情,例如将属性设置为null或undefined.

删除操作符删除对象的属性.

遇到某种挑战的情况是什么,这delete是最好的解决方案,与其他方面相比?

javascript memory-management

6
推荐指数
1
解决办法
187
查看次数

如何判断一个对象是否是一个RegExp对象?

可能重复:
RegExp的typeof

我有一个例程,正在测试一个对象是否符合给定的条件.

testForMatch(objectToTest, matchCriteria) {
    // all my testing logic here.
}
Run Code Online (Sandbox Code Playgroud)

该参数matchCriteria是一个可能如下所示的对象,例如:

{
    'size'     : "large",
    'color'    : /(blue|red)/
}
Run Code Online (Sandbox Code Playgroud)

matchCriteria在上面的例子将用来测试是否objectToTest有一个属性size与值"large"和属性color与任一值"blue""red".

因此matchCriteria,objectToTest为了匹配属性的值,将寻找属性/属性名称.或者,如果给出正则表达式作为值(color如上所述),则属性objectToTestRegExp.test()与给定的正则表达式相对应.

但是为了matchCriteria正确处理testForMatch(),我需要能够判断属性的值matchCriteria是字符串还是RegExp对象.

我的问题是,如何检测属性的值是否为RegExp对象?

javascript regex

6
推荐指数
1
解决办法
1505
查看次数