标签:als 浮点数 精度 sage class nic 0.1+0.2 定义 显示
ECMAScript 中有5种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number和String。一种复杂数据类型:object。
typeof操作符
由于js
中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.
通过typeof
关键字,对这5种数据类型会返回下面的值(以字符串形式显示)undefined
---------- 如果值未定义 Undefined
boolean
---------- 如果这个值是布尔值 Boolean
string
---------- 如果这个值是字符串 String
number
---------- 如果这个值是数值类型 Number
object
---------- 如果这个值是对象或null
Object
需要注意的是typeof null
返回为object
,因为特殊值null
被认为是一个空的对象引用。
typeof是一个操作符而不是函数,圆括号可以使用但不是必须
Undefined类型
Undefined
类型只有一个值,即特殊的undefined
。
在使用var
声明变量但未对其加以初始化时,这个变量的值就是undefined
。
声明但未初始化与尚未定义的变量还是不一样:
var message; //age未声明 alert(message); //"undefined" alert(age); //产生错误 alert(typeof(message)); //"undefined" alert(typeof(age)); //"undefined"
Null类型
Null类型也只有一个值,这个值是特殊的null,从逻辑角度来看,null
值表示一个空对象指针,而这也正是使用typeof
操作符检测null
时会返回object
的原因。
如果定义的变量将来准备用于保存对象,那么最好将该变量初始化为null,而不是其他值。这样一来,只要直接检测null
值就可以知道相应的变量是否已经保存了一个对象的引用了。
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
console.log(undefined == null); //true
Boolean类型
此类型只有两个值:true和false
注意:boolean类型的字面值true和false是区分大小写的。
avaScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),例如:
var message = ‘Hello World‘; var messageAsBoolean = Boolean(message);
下表列出了各种数据类型对应的转换规则
数据类型 | 转换为true | 转换为false |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值 | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
Number类型
最基本的数值字面量格式是十进制整数,十进制可以在代码中直接输入。
除了十进制,还可以用八进制和十六进制。
八进制字面值的第一位必须是零(0),然后八进制数字序列为(0~7),如果数字超出了0~7这个范围,那么前导0将被忽略,后面的数值按十进制解析。
var a = 070; //八进制状态下的56 var b = 079; //无效的八进制,解析为79 var c = 08; //无效的八进制,解析为8
八进制字面量在严格模式下是无效的
十六进制字面值前两位必须是0x,后跟任何十六进制数字(0~9及A~F),字母不区分大小写。
在算术运算时,八进制和十六进制都会被转换成十进制数值。
1.浮点数
所谓浮点数值,就是该数值中必须包括一个小数点,并且小数点后面必须至少有一个数字。
由于保存浮点数所占用内存是整数的两倍,所以ECMAScript会尽可能将浮点数转换为整数。
如果小数点后没有任何数字或浮点数本身就表示一个整数,就会被转换为整数。
console.log(1.) //1 console.log(10.00) //10
默认情况下,ECMAScript会将小数点后面带6个零以上的浮点数值转换为以e表示法表示的数值。(例:0.0000003会被转换为3e-7).
浮点数值的最高精度为17位。但算术计算精度远不如整数。例:0.1+0.2不是0.3,而是0.30000000000000004,这个小小的舍入误差会导致无法测试特定的浮点数值。
永远不要测试某个特定的浮点数值。
关于浮点数值计算产生舍入误差的问题:这是使用基于IEEE754数值的浮点计算的通病,ECMAScript并非独此一家,其他使用相同数值语言的也存在这个问题。
2.NaN
NaN(Not a Number),即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
NaN本身有两个特点:
1.任何涉及NaN的操作(例如NaN*10,NaN/10)都会返会NaN。
2.NaN与任何数值都不相等,包括NaN本身。
console.log(NaN == NaN); //false
isNaN(),判断是否“不是数值”,这个函数接受一个参数,该参数可以是任何类型,isNaN()在接收到一个值之后,会尝试将值转换为数值,可以转换的将返回false,不能转换为数值的将会返回true。
3.数值转换
有3个函数可以把非数值转换为数值:number(),parseInt()和parseFloat()。
number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。
parseInt()在转换字符串的时会忽略字符串前的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者是负号,返回NaN。
parseInt()可以接受两个参数,第一个为要转换的参数,第二个为基数(进制)。如果不指定基数意味着让parseInt()自己决定如何解析,因此为了避免错误的解析,建议指定基数。
parseFloat()用于转换浮点数。
String类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(‘)或双引号(")表示。
字符串的长度可以通过其length属性取得。
var text = "this string length is 24"; console.log(text.length); //24
转换字符串可以通过几乎每个值都有的toString()方法。
var a = 11; console.log(a,typeof a); //11 "number" var b = a.toString(); console.log(b,typeof b); //11 string
object类型
ECMAScript中的对象其实就是一组数据和功能的集合。可以通过以下方式创建一个对象:
var obj = new object();
标签:als 浮点数 精度 sage class nic 0.1+0.2 定义 显示
原文地址:https://www.cnblogs.com/loseway/p/9742167.html