JS_高程3.基本概念(2)
1.ECMAScript数据类型
5种简单数据类型,分别是:
Undefined
Null
Boolean
Number
String
1种复杂数据类型:
Object
(1)typeof操作符——检测给定变量的数据类型
“undefined”——未定义
“boolean”——布尔值
“string”——字符串
“number”——数值
“object”——对象或是null
“function”——函数
eg:
<script type="text/javascript">
var m="hello!"
alert(typeof(m));
alert(typeof m);
alert(typeof 93);
</script>
出现3个提示框,分别是:
注意:(1)以上例子说明,typeof操作符的操作数可以是变量,也可以是数值字面量。
typeof是一个操作符,而不是一个函数,所以例子中的圆括号可以使用,但不是必需的。
(2)调用 typeof null返回的是 “Object” ,因为特殊值null被认为是空的对象引用。
2.Undefined类型
undefined类型只有一个值,即特殊的undefined。使用var声明变量但没有进行初始化赋值时,这个变量的值就是undefined。
eg:
var message;
alert(message);
结果图:
上面的例子只是声明了变量message,但没有对其进行初始化。
注意:
(1)未经初始化的变量,其默认值为undefined,与没有进行定义的变量是不一样的。
eg:
var message;
alert(message);
alert(age);
第三行会出现错误:
运行以上代码,第一个警告框会显示变量message的值,即undefined。第二个警告框由于传递给alert()函数的是没有声明的变量age,则会导致一个错误。
对没有声明的变量,只能执行一项操作,即使用typeof操作符检测其数据类型(对没有声明的变量调用delete不会导致错误,但是这样做没有实际意义,而且在严格模式下会导致错误。)
(2)使用alert()函数,输出的变量的值,已经定义声明,但是没有进行初始化的变量的值为“undefined”,使用typeof操作符输出的变量的数据类型,已经定义声明,但是没有进行初始化的变量的数据类型也是“undefined”。
(3)对没有定义的变量使用typeof操作符同样也是返回undefined。
eg:
var message;
alert(typeof message);
alert(typeof age);
上面的代码会出现两个警告框,都是显示“undefined”。
3.Null类型
null类型的数据只有一个值,就是null,null值表示一个空对象的指针,当用typeof操作符检测null时,会返回“object”。
eg:
var car=null;
alert(typeof(car));
如果定义的变量是准备来保存对象的,最好将该变量初始化为null而是不其他的值。实际上undefined值是派生自null值的,因此ECMA-262规定它们的相等性测试要返回true。
alert(null==undefined);
注意:
尽管null和undefined有这样的关系,但是它们的用途是完全不同的。我们知道,在一般情况下,都没有必要把一个变量的值显式地设置为undefined,但是null却不同,只要意在保存对象的变量还有真正保存对象,就应该明确地让该变量保存为null值。
这样做不仅可以体现null作为空对象指针的惯例,也有助于进一步区分null和undefined。
4.Boolean类型
(1)该类型的值:true和false。(这两个值和数字值不是一回事,因此true不一定等于1,false不一定等于0。)
注意:Boolean类型的字面值是区分大小写的。
(2)ECMAScript中所有类型的值都有与Boolean值等价的值。要将一个值转化为其对应的Boolean值,可以转换函数Boolean(),至于放回的值是true还是false,取决于要转换至的数据类型及其实际值。
注:各种数据类型及其对应的转换规则,详见高程P26.
5.Number类型
(1)八进制字面值的第一位必须是0,当数字序列超过0~7时,前导0会被忽略,后面的数字将当做十进制数值解析。
八进制子在严格模式下无效的,会导致Javascript引擎抛出错误。
(2)在进行算术运算时,八进制和十六进制都会被转换成十进制数值。
(3)浮点数:该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。
注意:由于保存浮点数值需要的内存空间是保存整数的两倍,因此ECMAScript会不失时机地将浮点数转换为整数来保存。显然,如果小数点后没有任何数字,这个数值可以作为整数来保存,如果浮点数值本身就是一个整数(eg:1.0),那么该值也会被转换为整数。
(4)默认情况下,ECMAScript会将小数点后面带有6个零以上的浮点数值转换为以e表示法表示的数值。
(5)浮点数的最高精度为17位小数,但是在进行计算时其精度远不如整数。
eg:0.1+0.2的结果不是等于0.3,而是等于0.30000000000000004.
用代码测试情况如下:
var a=0.1,b=0.2;
if(a+b==0.30000000000000004){
alert("You got 0.3");
}
结果:
当代码为:
var a=0.1,b=0.2;
if(a+b==0.3){
alert("You got 0.3");
}
时,测试无法通过。
因此,一般不要测试某个特定的浮点数值。
JS_高程3.基本概念(2)的更多相关文章
- JS_高程3.基本概念(4)操作符
ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...
- JS_高程3.基本概念(3)
1.ECMAScript数值的范围 由于内存的限制,在大多数浏览器中,ECMAScript能够拿保存的数据的范围是 5e-324 ~ 1.7976931348623157e+308,其中最小的数值保存 ...
- JS_高程3.基本概念(1)
1.语法 (1)ECMAScript中的一切(变量,函数名和操作符)都是区分大小写的. (2)标识符 标识符的第一个字符必须是字母,下划线或是美元符号. 其他字符可以是字母,下划线,美元符号和数字. ...
- JS_高程3.基本概念(6)函数
1.ECMAScript中的函数使用function关键字来声明. eg: function sum (num1,num2){ alert(num1+num2); } sum(3,7); 注意: 在有 ...
- JS_高程3.基本概念(5)语句
1.if语句 2.do-while语句:后测循环语句,循环体内的代码至少执行一次. 3.while语句:前测循环语句. 4.for语句:前测循环语句. 注意:在ECMAScript中不存在块级作用域, ...
- JS高程3.基本概念(4)操作符
ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...
- JS高程3.基本概念(3)
1.ECMAScript数值的范围 由于内存的限制,在大多数浏览器中,ECMAScript能够拿保存的数据的范围是 5e-324 ~ 1.7976931348623157e+308,其中最小的数值保存 ...
- JS高程3.基本概念(2)
1.ECMAScript数据类型 5种简单数据类型,分别是: Undefined Null Boolean Number String 1种复杂数据类型: Object (1)typeof操作符--检 ...
- JS高程3.基本概念(1)
1.语法 (1)ECMAScript中的一切(变量,函数名和操作符)都是区分大小写的. (2)标识符 标识符的第一个字符必须是字母,下划线或是美元符号. 其他字符可以是字母,下划线,美元符号和数字. ...
随机推荐
- 树递归写法ref实现
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleAppTest { class ...
- POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...
- spring security实现动态配置url权限的两种方法
缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...
- Flink--Window apply
和window的操作类似,只不过操作更加灵活,具体的操作需要在匿名内部类的方法中实现:当有比较复杂的需求时候,可以使用: object WindowApply { def main(args: Arr ...
- springboot创建错误
1.Unknown system variable 'query_cache_size' 解决:https://www.cnblogs.com/nicknailo/articles/9074804.h ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十二集之FastDFS的使用】
(自己的项目路径)相关项目在web部分中priv.lirenhe.fastdfs 官方提供一个fastdfs开发项目,下载下来maven install 以下内容是借鉴网上的一篇文章,但是不知道网址了 ...
- 043 关于 loadrunner 返回 http 500 错误解决思路
这个支持项目中,总是出现500的问题,后来发现是redis总是崩掉. 后来,在压力测试,500的问题,又开始不断出现,虽然不是我自己处理的,但是没少吃苦头. 看了这篇文章,感觉说的还是很有道理,如何来 ...
- Machine Learning 神器 - sklearn
Sklearn 官网提供了一个流程图, 蓝色圆圈内是判断条件,绿色方框内是可以选择的算法: 从 START 开始,首先看数据的样本是否 >50,小于则需要收集更多的数据. 由图中,可以看到算法有 ...
- day3逻辑运算符
今天主讲逻辑运算符 以下是老师的大纲: # + - * / % ** // # == != <> # count = count + 1 count += 1 # count = ...
- ZooKeeper用途
ZooKeeper还可以用作其他用途,例如: 数据发布与订阅(配置中心) 负载均衡 命名服务(Naming Service) 分布式通知/协调 集群管理与Master选举 分布式锁 分布式队列 一些在 ...