在某些文献中,我读到Javascript中的变量支持Duck Typing,而PHP中的变量支持Type Juggling。我对此有点困惑,因为在Javascript和PHP中声明变量时,它看起来很相似。这些术语之间的主要区别是什么?
答案 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
另一方面,鸭子的输入是关于一个对象本身的行为的问题:
如果它看起来像鸭子,像鸭子一样游泳,而像鸭子一样嘎嘎叫,那可能就是鸭子。
如果对象具有正确的方法,我们可以假定它是特定类型的。如果它像鸭子一样包含方法quack
或swim
,则可以是鸭子。专门针对JS,Example of Javascript Duck Typing?有很好的例子-这里没有类型转换