JavaScript与C++等其他语言的不同之处——类型、变量、运算符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZLANBL085321/article/details/85606278
   因工作需要,最近要自学JavaScript,在学习的过程中,发现JS和其他编程语言有许多相似和不同之处,在此就记录下它的不同之处。

一、数据类型
1、数字
与其他编程语言不同,JS不区分整数值和浮点数值,JS中所有数字均用浮点数值表示,JS采用IEEE754标准定义的64位浮点格式表示数字。
2、文本
在JS中,字符串常量可以由单引号或双引号括起来。JS中没有表示单个字符的“字符型”,要表示单个字符,只需将其赋值给字符串变量即可,这个字符串长度为1。
3、布尔值
这个类型只有两个值,true或false。任意JS的值都可以转为布尔值,下面这些值会被转换成false:
undefined、null、0、-0、NaN、“”
所有其他值,包括所有对象(数组)都会转换成true。
4、JS特殊的两个原始值:null和undefined
1)null 它表示一个特殊值,常用来描述“空值”,对null执行typeof预算,结果返回字符串object,即null可以看做是一个特殊的对象值,含义是“非对象”。但实际上,null是它自有类型的唯一一个成员,它可以表示数字、字符串、对象是“无值”的。
2)undefined 它是变量的一种取值,表明没有初始化。如果要查询对象属性或数组元素的值时返回undefined则说明这个属性或元素不存在。如果函数没有返回任何值,则返回undefined。

和其他编程语言一样,JS会自动进行类型转换,如下表:
JS类型转换
二、变量
在JS的变量声明中并没有知道变量的数据类型。变量是使用关键字var来声明的,可以是任意数据类型。在JS中重复声明变量是合法且无害的,如果重复声明带有初始化的变量,等同一条简单的赋值语句。

ES5及之前没有常量的定义,ES6引入了const来定义常量。
JS中没有静态变量,不存在关键字static。

JS中没有块级作用域,取而代之地使用了函数作用域:变量在声明它们的函数体及这个函数体嵌套的任意函数体内都是有定义的。这意味着变量在声明之前甚至已经可用,JS的这个特性被非正式地称为“声明提前”,即JS里声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部,同时变量初始化留在原来的位置。

JS和其他编程语言一样,使用分号(;)将语句分隔开,如果语句各自独占一行,通常可以省略语句之后的分号。但是JS并不是在所有换行处都填补分号,只有在缺少了分号就无法正确解析代码的时候,JS才会填补分号。

三、运算符
1、算术运算符
JS中的算术运算在溢出、下溢或被零整除是不会报错。当数字运算结果超过了JS所能表示的数字上限(溢出),结果为一个特殊的无穷大值,以Infinity表示。同样,当负数的值超过了,结果为负无穷大,以-Infinity表示。被零整除在JS中并不会报错,它只是返回Infinity或-Infinity。0/0、Infinity/Infinity、给任意负数作开方运算、算数运算符与不是数字或无法转换为数字的操作数一起使用时都将返回NaN。
在JS中,取模运算符的操作数通常是整数,但也适用于浮点数,比如6.5%2.1=0.2。而在C等语言中,%不能应用于float或double类型。

2、位运算符
按位与(&)、按位或(|)、按位异或(^)、按位非(~)、左移(<<)与C语言中差不多,JS中右移分为带符号右移(>>)和无符号右移(>>>),而在C语言中,都用>>表示右移,只是带符号值进行右移时称为“算术移位”,无符号数右移时称为“逻辑右移”。

3、关系运算符
在关系运算符中,“=”称为严格相等运算符,它用来检测两个操作数是否严格相等。“”运算符称为相等运算符,它用来检测两个操作数是否相等,这里“相等”的定义非常宽松,可以允许进行类型转换。“!=”和“!”运算符的检测规则是“”和“===”运算符的求反。

in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。如果右侧的对象拥有一个名为左操作数值的属性名,则表达式返回true。

instanceof运算符希望左操作数是一个对象,右操作数标识对象的类。如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false。当通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对“父类”的检测。

没有更多推荐了,返回首页