这个问题全与语义有关
如果我给你这些数据:12
它是什么类型?您无法确定。可以是整数-可以是浮点数-可以是字符串。从这个意义上讲,它是非常“无类型”的数据。
如果我给您一种虚构的语言,让您在此数据和某些其他任意数据上使用“加”,“减”和“连接”之类的运算符,则“类型”在某种程度上与我的虚构语言无关(例如:也许add(12, a)
产量109
是12
加的ASCII值a
)。
让我们再谈C。C几乎可以让您对任意数据执行任何操作。如果您使用的函数需要两个uint
s-您可以强制转换并传递您想要的任何东西-值将简单地解释为uint
s。从这个意义上讲,C是“无类型的”(如果您以这种方式对待它)。
但是-直达Brendan的要点-如果我告诉您“我的年龄是12
-”,则12
有一个类型-至少我们知道它是数字。在上下文中,所有内容都有一种类型-与语言无关。
这就是为什么我一开始说的原因-您的问题是语义学之一。untyped是什么意思?我认为布伦丹说“没有静态类型”时就打在了头上-因为这可能意味着全部。人类自然将事物分类。我们从直觉上知道,汽车和猴子之间根本就存在区别-从来没有被教导要做出这些区别。
首先回到我的示例-一种“不关心类型”(每秒)的语言,可以让您“添加”“年龄”和“名称”而不会产生语法错误...但是并不意味着这是合乎逻辑的操作。
JavaScript可以让您做各种疯狂的事情,而无需考虑它们是“错误”。这并不意味着您在做的事在逻辑上是合理的。这就是开发人员要解决的问题。
在编译/构建/解释时不强制类型安全的系统/语言是否为“未键入”或“动态键入”?
语义学。
编辑
我想在这里添加一些内容,因为有些人似乎被“是的,但是Javascript确实有一些”类型”。
在评论别人的回答时,我说:
在Javascript中,我可以将某些对象构建为“猴子”,而将某些对象构建为“人类”,并且可以将某些功能设计为仅对“人类”进行操作,而其他功能则只能对“猴子”进行操作,并且还有其他人只谈“有武器的事情”。无论是否有人告诉过该语言,是否存在诸如“带手臂的东西”这样的对象类别与汇编(“无类型”)与Javascript(“动态”)都没有关系。这全都是逻辑完整性的问题-唯一的错误是使用了没有该方法的武器。
因此,如果您认为Javascript在内部具有某种“类型”概念,因此也具有“动态类型”,并且认为这在某种程度上“与无类型系统不同”,您应该从上面的示例中看到,任何“在内部具有“类型”确实无关紧要。
为了使用C#执行相同的操作,例如,我需要一个称为ICreatureWithArms
或类似名称的接口。在Javascript中不是-在C或ASM中不是。
显然,Javascript是否对“类型”有任何了解都是无关紧要的。