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

时间:2016-01-03 08:46:57

标签: 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代码中,解释器会从文字或其他内容中检测变量的数据类型,我是新的请帮帮我吗?

搜索后
IN PHP Source

  

如果将字符串值赋给变量$ var,则$ var变为字符串。   如果然后将整数值赋给$ var,则它变为整数。

1 个答案:

答案 0 :(得分:0)

在你的C示例中,comnpiler知道a,b和c是整数,因为它们被声明为int,并且它们总是(就编译器而言)是int类型并且保持int值,所以在编译时时间生成的表达式(如a + b)将简单地调用int安全的加法运算符,因为知道变量具有int值。

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

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