小编Hen*_*zia的帖子

Logical NOT on Boolean Object在Javascript中始终返回false

为什么javascript中的逻辑非运算符在布尔值和布尔对象之间返回不同的结果?请考虑以下示例.

!true  // false
!false // true

!(new Boolean(true))  // false
!(new Boolean(false)) // false
Run Code Online (Sandbox Code Playgroud)

根据规范,它表示正在评估的值被转换ToBoolean.如果参数是Object,ToBoolean将返回true,如果参数是Boolean,则返回原样.

进一步挖掘,ToBoolean也用于if语句和条件运算符等其他地方,请考虑以下示例:

var a = (new Boolean(false)) ? "unexpected" : "expected";
console.log(a); // unexpected
Run Code Online (Sandbox Code Playgroud)

问题:布尔对象是一个Object还是一个布尔值?我们不应该将布尔对象评估为布尔值吗?


UPDATE

我的问题被标记为重复的问题,这.那个问题没有一个令人满意的答案,因为没有人回答我的问题,布尔对象是一个对象,还是布尔值?我们不应该将布尔对象评估为布尔值吗?

简单地知道布尔对象是一个对象是不够的,为什么它甚至存在,并且处理和/或设计具有布尔对象的对象的正确方法仍然没有答案.

javascript

26
推荐指数
2
解决办法
3278
查看次数

如何在Javascript中动态创建对象及其方法?

我最近发现在Ruby中动态创建对象和方法是一项非常重要的工作,这可能是因为我在Javascript中的背景经验.

在Javascript中,您可以动态创建对象,其方法如下:

function somewhere_inside_my_code() {
  foo = {};
  foo.bar = function() { /** do something **/ };
};
Run Code Online (Sandbox Code Playgroud)

如何在Ruby中完成上述语句(如在Javascript中一样简单)?

ruby methods object

11
推荐指数
2
解决办法
5241
查看次数

在C#中获取和设置(私有)属性,而不使用getter setter魔术方法重载

摘要

代码示例:

Class People {
    // private property.
    private $name;

    // other methods not shown for simplicity.
}
Run Code Online (Sandbox Code Playgroud)

直接前进.我假设这$name是一个PRIVATE类成员(或属性,变量,字段,根据需要调用它).有没有办法在PHP中执行这些操作:

$someone = new People();
$someone->name = $value;
$somevar = $someone->name;
Run Code Online (Sandbox Code Playgroud)

没有使用__get($name)和__set($name, $value).


背景

我需要检查分配的$value,因此我只需要一个这样的getter setter:

getName();
setName($value);
Run Code Online (Sandbox Code Playgroud)

而不是必然一个getter的setter魔术方法重载是这样的:

__get($value); 
__set($value, $name);
Run Code Online (Sandbox Code Playgroud)

也就是说,我只需要一个吸气剂装置.但那不是我想要的.它只是感觉不像面向对象,因为来自静态类型语言(如C++或C#)的人可能会感觉和我一样.

有没有办法在不使用getter setter魔术方法重载的情况下在C#中获取和设置私有属性?


更新

为什么不是魔法?

  1. 网络上有传言说魔术方法比明确的getter setter方法快10倍,我还没有测试过,但要记住这是一件好事.(想象它不是那么慢,只慢2倍,见下面的基准测试结果)

  2. 如果我使用魔术方法而不是将它们分成不同的函数,我必须在一个巨大的方法中填充所有内容,就像在显式getter setter中一样.(此要求可能已由ircmaxell回答)

绩效高管基准测试

我很好奇使用魔术方法和显式getter setter之间的性能开销,因此我为这两种方法创建了自己的基准测试,希望它对任何人都有用.

使用magic方法和method_exist:

(点击这里查看代码)

  • 吸气成本为0.0004730224609375秒.
  • 二传手的成本为0.00014305114746094秒.

使用显式getter …

php getter setter properties getter-setter

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

为什么在Ruby中将哈希推入数组必须使用括号?

我想使用Ruby版本1.8.7将哈希添加到数组中:

items = Array.new
items.push {:a => "b", :c => "d"}
Run Code Online (Sandbox Code Playgroud)

上面的语句将返回如下错误:

SyntaxError: compile error
(irb):35: syntax error, unexpected tASSOC, expecting '}'
items.push {:a => "b", :c => "d"}
                 ^
(irb):35: syntax error, unexpected ',', expecting '}'
items.push {:a => "b", :b => "c"}
                      ^
Run Code Online (Sandbox Code Playgroud)

好吧,我发现解决方案是将push参数包装在括号内,( )或者我可以使用<<运算符.我也知道push接受一个或多个参数并且<<只接受来自这个答案的单个参数,但令我困扰的是为什么我需要使用括号,而我们都知道Ruby中的括号是可选的?

ruby arrays hash

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

为什么Ruby使用=〜而不是〜=匹配运算符?

我有关于在Ruby中匹配运算符的这个愚蠢的问题.为什么Ruby会生成匹配的运算符=~而不是~=?有没有历史,心理或其他考虑因素而不是后者?

我无法找到任何这信息,我需要就这个意义上说,因为我继续键入错误的东西,由于其他运营商如+=,-=,!=,>=并<=放置=在其他经营者的权利,而=~正好相反.

请让我高兴.

ruby regex

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

标签 统计

ruby ×3

arrays ×1

getter ×1

getter-setter ×1

hash ×1

javascript ×1

methods ×1

object ×1

php ×1

properties ×1

regex ×1

setter ×1