本文介绍JavaScript基础语法与核心对象,涵盖String、Number、Boolean等五大对象。重点解析字符串与数字的强制转换区别,以及布尔型在条件判断中的特殊规则,特别是非Boolean表达式转换为Boolean值的逻辑与负数判断陷阱。
JavaScript基础语法与对象概述
本教程基于对JScript.chm手册的熟悉程度编写,建议读者在查阅手册的同时参考本教程以加深理解。
JavaScript的语法结构与大多数类C语言相似,主要差异在于其特有的语言特性。具体的语法细节建议参考官方手册,此处不再赘述。
JavaScript包含五大核心对象:String、Number、Boolean、Object和Function。
JavaScript支持四种循环结构:
for(var i=0; i<n; i++) {}
do {} while(true);
while(true) {}
for (var i in collection) {}
异常处理机制如下:
try {} catch(aVariable){}
此处不逐一列举所有JS语法,重点说明JS的几大对象,特别是手册中可能未详细覆盖的部分。
字符串与数字的类型转换机制
一、字符串(String)。
字符串是JS中最常用的类型之一。将其强制转换为字符串主要有以下两种方式:
1、使用字符串连接符“+”号。在JS中,“+”号在数值运算时表示加法,在字符串操作中则表示拼接。例如:
<script>
var a_number = 1000
var a_string = a_number + "";
</script>
2、使用String构造函数进行强制转型。
<script>
var a_number = 1000
var a_string = String(a_number);
</script>
需注意,上述方式属于强制转型,String前不加“new”关键字。若加上“new”关键字,则生成的是String对象。对象包含属性和方法,而原始字符串不具备这些特性。对比示例如下:
<script>
var a_number = 1000
var a_string = String(a_number);
a_string.property = "js";
alert(a_string.property) //将提示undefined
var a_object = new String(a_number)
a_object.property = "js";
alert(a_object.property) //将提示js
</script>
由此可见,是否使用“new”关键字存在显著区别。这一规则同样适用于Number和Boolean类型,后续关于此类转型的内容将不再重复说明。
二、数字(Number)。
此处讨论数字类型的转换问题。
除了使用Number进行强制转换外,还可以使用parseInt和parseFloat分别转换为整型或浮点型。若转换结果非数字,将返回NaN(Not a Number),此时可使用isNaN函数进行判断,建议查阅手册了解具体语法并掌握该函数。
布尔型转换规则与条件判断陷阱
三、布尔型(Boolean)。
布尔类型的处理较为特殊,因为JS对其转换规则较为独特。
除了JScript手册中所述:
一个值为 true 或者 false 的表达式。如果需要,非 Boolean 表达式也可以被转换为 Boolean 值,但是要遵循下列规则:
所有的对象都被当作 true。
当且仅当字符串为空时,该字符串被当作 false。
null 和 undefined 被当作 false。
当且仅当数字为零时,该数字被当作 false。
外,还需注意以下情况:
首先,在未强制转换为布尔型之前(即非true也非false的状态下):
1、在数字条件判断中,通常涉及三种情况:0、负数、正数。只要是非0值即为true,示例如下:
<script>
var a = 0;
var b = -1;
var c = 1;
function assert (aVar) {
if (aVar) alert(true);
else alert(false);
}
assert(a) // false
assert(b) // true
assert(c) // true
</script>
注意:上述示例中条件判断是直接针对条件语句进行的。若将条件语句修改为:
<script>
var a = 0;
var b = -1;
var c = 1;
function assert (aVar) {
if (aVar==true) alert(true);
else alert(false);
}
assert(a) // false
assert(b) // false
assert(c) // true
</script>
负数的判断结果将截然不同。
2下一页阅读全文