原文链接:http://www.codeproject.com/Articles/333596/What-devs-should-know-about-Javascript
作为javascript初学者,你应该了解这些 (以下js表示javascript的简称)
大家都知道在开发服务器端程序或者桌面版程序中,你可以选择你喜欢的开发语言以及开发框架。然后在基于浏览器的客户端开发中,你不得不使用令人恼火的javascript。好消息是如果你实在不喜欢javascript的话,你可以使用其他语言开发后编译成javascript,比如 Script#, WebSharper, Dart, CoffeeScript, ClojureScript, Opa等等。但无论如何,javascript依然是web开发的通用语言工具,也就意味着,如果你想做一个基于web的应用,那么你不得不或多或少去学学javascript。
这篇文章中,我将介绍一下javascript最重要的一些关键点。当然你学习的前提你自己还必须是一个有经验的程序员以及一点点去学习js的意愿,而且虽然这篇文章主要是针对C#以及JAVA开发者来教学的,但如果你习惯了你一样会学到很多有用的东西。
Javascript的语言家族
顾名思义,javascript这个名称表示它是基于java的,和java差不多的类C语言,然而,javascrip并不属于类C语言家族,它实际上是Java,Scheme,Perl以及它自己的混合衍生物。
肤浅的去看,你应该能马上习惯javascript,因为它的语法与java很相像,也有分支结构括号,分号以及if-for-while-do-switch-throw-catch-finally关键字,我想已经适应了C#/Java的你肯定会喜欢。
动态类型
与C#/Java的静态类型语言不同,JS是动态类型的,也就是说JS变量能够任意改变它的类型,而且你也无法为方法去定义明确的返回类型,如下面的代码段这是典型的静态类型语言
view source
print?
1
intx = 5;
2
x ="hello";
如果我们马上编译代码的话,显然会抛出一个TypeError的异常。但JS却不会,哪怕变量的类型都改变了。
view source
print?
1
varx = 5;
2
x ="hello";
因为在JS中,变量的类型本身就是可以改变的,编译器根本不知道这些变量将代表什么,所以你也别对JS的编译器抱太多期望,因为编译时检错有点垃圾以至于你必须更多地在程序运行时进行更多的测试来找出潜在的BUG。
弱类型
JS也是弱类型语言,意味着JS可以为变量做任何的隐形类型转换,这样大家可要小心了。在强类型语言中,编译器会进行检错看能否进行转换。比如代码2+"3"将会提示错误。然而在JS将会直接将数字转换成字符串,或者bool变量,空数组转换成数字,甚至其他什么东西转换成bool变量。。。这一切都是你无法预见的。
虽然弱类型会产生很多你无法预料的结果。但依然有两个非常重要的关键点我们必须去记住:
第一,JS有 == 操作符,你也许会以为这个与其他语言的 == 操作符一个意思,但很不幸的是它不是,如果两个不同类型的变量进行 == 操作符比较的话,JS将会尝试转换它们的类型为一致,然后才进行等值判断。所以请注意下面的代码,这些代码在JS中是肯定返回true的。
view source
print?
1
123 =="123"
2
true== 1
3
false=="0"
4
[] ==""
5
{} =="[object Object]"
不过,幸运的是,JS还是有严格的等值判断操作符的 === 与 !==,如果两个变量类型不一致的话,=== 是肯定会返回false的,所以你现在应该知道在关键场合你应该使用什么等值判断操作符了吧!
第二,JS将总是将 if 语句的表达式转换成bool值,以下这些代码在if判断语句中将会被认为是false。
view source
print?
1
false
2
null
3
undefined
4
0
5
""
6
NaN
请记住除此以外,任何其他类型的表达式在JS中都被认为是true。