Javascript 鸭子打字与打字杂耍

Javascript 鸭子打字与打字杂耍,javascript,php,Javascript,Php,在一些文献中,我读到Javascript中的变量支持Duck类型,PHP中的变量支持类型转换。我对它有点困惑,因为在Javascript和PHP中声明变量时,它看起来很相似。这些术语之间的主要区别是什么 我认为你把东西弄混了:正如PHP文档所解释的,类型杂耍是指在需要时自动将值转换为更适合的类型的灵活性。例如,以下方法可以很好地工作: $a = "42"; // now $a is a string $a = $a + 42; // now $a is an integer $a =

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

我认为你把东西弄混了:正如PHP文档所解释的,类型杂耍是指在需要时自动将值转换为更适合的类型的灵活性。例如,以下方法可以很好地工作:

$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
另一方面,duck类型是关于对象本身如何行为的问题:

如果它看起来像一只鸭子,像鸭子一样游泳,像鸭子一样呱呱叫,那么它很可能就是一只鸭子


如果一个对象有合适的方法,我们可以假设它是一种特定类型的对象。如果它像鸭子一样包含
quack
swim
方法,那么它可以是鸭子。特别是对于JS,这里有一些很好的例子-这里没有涉及类型转换

我认为你把东西弄混了:类型转换,正如PHP文档所解释的,是关于在需要时自动将值转换为更适合的类型的灵活性。例如,以下方法可以很好地工作:

$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
另一方面,duck类型是关于对象本身如何行为的问题:

如果它看起来像一只鸭子,像鸭子一样游泳,像鸭子一样呱呱叫,那么它很可能就是一只鸭子


如果一个对象有合适的方法,我们可以假设它是一种特定类型的对象。如果它像鸭子一样包含
quack
swim
方法,那么它可以是鸭子。特别是对于JS,这里有一些很好的例子-这里没有涉及类型转换

这些可以说是多余的概念,在学习编码时不要太在意它们。这些可以说是多余的概念,在学习编码时不要太在意它们。