松散类型语言如何知道如何处理不同的数据类型?
How does a loosely typed language know how to handle different data types?
我昨天在做一个简单的任务,只需要将几个下拉菜单中的值相加并通过 Javascript 显示在文本框中。出乎意料的是,它只是在构建一个字符串,所以它没有给我值 4,而是给了我“1111”。我明白发生了什么;但我不明白如何。
使用松散类型的语言,如 Javascript 或 PHP,计算机如何 "know" 将某物视为什么类型?如果我只是将所有内容键入 var
,它如何区分字符串、int 和对象?
+
运算符将在 Javascript 中做什么是在运行时确定的,此时两个实际参数(及其类型)都是已知的。
如果运行时发现参数之一是字符串,它将进行字符串连接。否则它将进行数字加法(如有必要,将参数强制转换为数字)。
此逻辑被编码到 +
运算符(或任何其他类似函数)的实现中。如果您查看它,您会在其中看到 if typeof(a) === 'string'
语句(或非常相似的语句)。
If I just type everything as a var
好吧,你根本不用打字。该变量没有类型,但最终出现在该变量中的任何实际值都有一个类型,并且代码可以检查该类型。
我昨天在做一个简单的任务,只需要将几个下拉菜单中的值相加并通过 Javascript 显示在文本框中。出乎意料的是,它只是在构建一个字符串,所以它没有给我值 4,而是给了我“1111”。我明白发生了什么;但我不明白如何。
使用松散类型的语言,如 Javascript 或 PHP,计算机如何 "know" 将某物视为什么类型?如果我只是将所有内容键入 var
,它如何区分字符串、int 和对象?
+
运算符将在 Javascript 中做什么是在运行时确定的,此时两个实际参数(及其类型)都是已知的。
如果运行时发现参数之一是字符串,它将进行字符串连接。否则它将进行数字加法(如有必要,将参数强制转换为数字)。
此逻辑被编码到 +
运算符(或任何其他类似函数)的实现中。如果您查看它,您会在其中看到 if typeof(a) === 'string'
语句(或非常相似的语句)。
If I just type everything as a var
好吧,你根本不用打字。该变量没有类型,但最终出现在该变量中的任何实际值都有一个类型,并且代码可以检查该类型。