前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >理解JavaScript中的Loose Typing(弱类型)

理解JavaScript中的Loose Typing(弱类型)

作者头像
lesM10
发布2019-08-26 16:44:36
6340
发布2019-08-26 16:44:36
举报

对于大多数前端开发者来说,JavaScript是他们第一次到的既是脚本又是解释语言。对这些开发者来说,loosely typed variables的概念和暗示可能是第二天性的。然而,对Web 2.0应用的爆炸性需求导致越来越多的后端开发人员不得不涉足客户端技术的池塘。当中的绝大多数后端开发者都有着strongly typed languages背景(比如C#,Java),并且不熟悉使用loosely typed variables所带来的灵活和潜在的坑。

因为loose typing这个概念在编写JavaScript时是如此的重要,所以理解它是必需的。这篇文章对JavaScript中的loose typing做了上层的讨论。因为不同语言中的loose typing可能有潜在的区别,我们把讨论的范围限定在JavaScript中。OK,让我们开始吧...

什么是Loose Typing?

这看起来是个不错的可以开始讨论的地方。理解“loose typing是什么,不是什么”是非常重要的。Loose typing意味着“声明变量时不带类型”。这和strongly typed languages是相反的(strongly typed languages声明变量时同时要指定类型)。考虑如下的栗子:

/* JavaScript Example (loose typing) */

var a = 13; // Number declaration

var b = "thirteen"; // String declaration

/* Java Example (strong typing) */

int a = 13; // int declaration

String b = "thirteen"; // String declaration

注意在上述例子中,a和b都被声明为var类型。但是这不意味着“a和b没有类型,或者 它们是var类型”。在JavaScript中的变量是有类型的,但类型是内部决定的。在上述例子中,变量a将会是Number类型,变量b是String类型。Number,String是JavaScript中3种primitives的其中2种,第三种是布尔类型。

JavaScript除了primitives还有其它的类型。JavaScript中的类型图表如下:

注意,primitives和objects之间的区别将会在JavaScript 2.0中去除。你可以从这儿了解更多。

类型强制转换(type coercion)

Type coercion是和loose typing紧密相关的一个话题。既然数据类型是由内部管理的,那么类型也常常会在内部作转换。理解type coercion的规则是极其重要的。思考下边的表达式,并确保你理解了它们:

7 + 7 + 7; // = 21

7 + 7 + "7"; // = 147

"7" + 7 + 7; // = 777

在上述例子中,算术被从左到右执行,直到遇到String类型。遇到String类型时,整个表达式都被转换为字符串,并作连接。

Type coercion也经常出现在比较中。你可以通过使用‘===运算符’禁止type coercion。思考如下例子:

1 == true; // = true

1 === true; // = false

7 == "7"; // = true

7 === "7"; // = false;

当然也有显式转换变量类型的方法(如parseInt,parseFloat,它们都是转换字符串为数值)

双重否定(!!)也可以用来转换String/Number为布尔类型。思考如下的例子:

true === !"0"; // = false

true === !!"0"; // = true

最后

这明显不是JavaScript中'loose typing' / 'type coercion'的最权威的参考。然而,对那些不熟悉这些话题的童鞋,我希望这是一个有用的资源。对那些熟悉这些话题的童鞋,我希望这是一个更好的深入。我已经确保上述内容是准确的,但是如果你发现任何错误,请告诉我,我会及时修正。

本文翻译自:http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Loose Typing?
  • 类型强制转换(type coercion)
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档