Javascript 理解解释型动态语言中的类型检测

Javascript 理解解释型动态语言中的类型检测,javascript,php,python,types,scripting,Javascript,Php,Python,Types,Scripting,Python、Php、JS等动态脚本语言如何知道变量的数据类型 /* C code */ int a1 = 1; int b1 = 2; int c1 = a1 * b1; 在上面的C示例中,编译器知道a和b是整数,有了这些知识,它可以调用函数,将两个整数相加并返回另一个整数 /* JS code */ var a1 = 1; var b1 = 2; var c1 = a1 * b1; 在上面的JS代码中,解释器是否从文本或其他内容中检测变量的数据类型,我是新手请帮助我 搜索后 PHP中的

Python、Php、JS等动态脚本语言如何知道变量的数据类型

/* C code */
int a1 = 1;
int b1 = 2;
int c1 = a1 * b1;
在上面的C示例中,编译器知道a和b是整数,有了这些知识,它可以调用函数,将两个整数相加并返回另一个整数

/* JS code */
var a1 = 1;
var b1 = 2;
var c1 = a1 * b1;
在上面的JS代码中,解释器是否从文本或其他内容中检测变量的数据类型,我是新手请帮助我

搜索后
PHP中的

如果将字符串值分配给变量$var,$var将成为字符串。 如果将整数值分配给$var,则它将变为整数


在您的C示例中,编译器知道a、b和C是整数,因为它们被声明为int,并且它们(就编译器而言)始终是int类型并持有int值,因此,在编译时,为表达式(如a+b)生成的代码将简单地调用int safe的加法运算符,因为变量具有int值

Python不允许您声明变量的类型,因此Python所做的就是将类型和值放在一起——它们是不可分割的——因此变量中的值的类型总是已知的。您可以使用type()和isinstance()检查此情况。是的,类型最初是从文字推导出来的,例如1是整数,1.0是浮点,“asd”是字符串。然后,一旦变量中有一个值,变量的类型将在表达式中使用,以允许调用正确的运算符函数,例如+,其中添加int不同于添加(连接)字符串,并且通过计算整个表达式的值和类型来保留中间结果的类型。Python还知道哪些类型可以强制转换为相关的类型,例如,Integer转换为float,哪些不能。在Python中,当您编写像a+b这样的表达式时,在运行时,解释器代码会查看a和b中的值类型,并尝试找到要调用的匹配运算符,如果找不到,则会引发异常


希望这是有道理的。如果您搜索,可能会有更好的解释。

重复数据消除,因为选择的重复目标的答案很糟糕。它完全混合了动态和弱类型。