鸭打字vs杂耍类型

时间:2018-12-06 13:59:14

标签: javascript php

在某些文献中,我读到Javascript中的变量支持Duck Typing,而PHP中的变量支持Type Juggling。我对此有点困惑,因为在Javascript和PHP中声明变量时,它看起来很相似。这些术语之间的主要区别是什么?

1 个答案:

答案 0 :(得分:3)

我认为您正在混淆:正如PHP文档所解释的,类型变戏法具有灵活性,可以在需要时自动将 cast 值自动转换为更适合的类型。例如,以下可以正常工作:

$a = "42";     // now $a is a string
$a = $a + 42;  // now $a is an integer
$a = $a + 23;  // now $a is still an integer
$a = $a + 1.3; // now $a is a float

另一方面,鸭子的输入是关于一个对象本身的行为的问题:

  

如果它看起来像鸭子,像鸭子一样游泳,而像鸭子一样嘎嘎叫,那可能就是鸭子。

如果对象具有正确的方法,我们可以假定它是特定类型的。如果它像鸭子一样包含方法quackswim,则可以是鸭子。专门针对JS,Example of Javascript Duck Typing?有很好的例子-这里没有类型转换