JS的基本数据类型

作为一个软件专业的孩纸,本应该精通各种语言,无奈小主只是略懂皮毛,今天又加深了点,写出来和大家分享下:

JS的数据类型有六种数据类型:undefined、Null、Boolean、Number、String和Object。typeof就是用来检测给定变量的数据类型的!注意typeof操作符的操作数可以是变量,也可以是数值。typeof是一个操作符而不是函数,因此不一定非要写成typeof(),这个括号不是必须的!

alert(typeof(1-'a'))检测的数据类型是number!

这里需要注意的是如果是alert(typeof(1+'a'))的话,检测出来的数据类型就是string!!

下面说说js中字符和数字之间的转换:

将字符串转换成数字,得用到parseInt函数。

parseInt(string) : 函数从string的开始解析,返回一个整数。

 举例:parseInt('123') : 返回 123(int);

parseInt('1234xxx') : 返回 1234(int);

 如果解析不到数字,则将返回一个NaN的值,可以用isNaN()函数来检测;

eg :

var i = parseInt('abc');

if (isNaN(i))

{

alert('NaN value');

}

 同样的parseFloat函数是将字符串转换成浮点数。

举例:parseFloat('31.24abc') : 返回 31.24;

将字符串转换成数字,得用到String类的toString方法

举例:

var i = 10;

var s = i.toString();

alert(typeof s); //将输出 String

js数字与字符串的区别

js的数字的加法与字符串的连接都是 + 符号, 所以究竟是加还是字符串的连接就取决与变量的类型。

举例:

var a = 'abc' + 'xyz'; //a的值为:abcxyz,字符串与字符串是连接

var a = 10 + 5; //a的值为:15,数字是加

var a = 'abc' + 10; //a的值为:abc10,字符串与数字,自动将10转换成字符串了

var a = 'abc' + 10 + 20 + 'cd'; //a的值为:abc1020cd

var a = 10 + 20 + 'abc' + 'cd'; //a的值为:30abccd,可以数字加的先数字加,然后再连接

下面说说js运算符的优先级:

逻辑与(&&)遇到false就返回,逻辑或(||)遇到ture就返回。这点是非常重要的!

同时还需要注意一个问题就是:

举个例子说:var a="5"

                 var b="15"

                 alert(a<b)

弹出的框会显示FALSE!这是为什么呢?

首先大家要了解的是a和b在这里都是字符型的,它们在这儿进行比较的时候是按位比较先拿a中的第一位"5"和b中的第一位"1"作比较,自然5>1,所以就会弹出个FALSE!

还有一个问题:0.1 + 0.2 等于几?

如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0.2 = 0.3 啊,那还用问吗?连幼儿园的小朋友都会回答这么小儿科的问题了。但是你知道吗,同样的问题放在编程语言中,或许就不是想象中那么简单的事儿了。

var a=0.1;
var b=0.2;
alert(a+b)

你一定以为是弹出0.3吧!那你就错啦!真正的答案是0.30000000000000004这是为什么呢!是不是很奇葩?以下将为你揭秘、

其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。下面就分析下为什么会有这个精度误差,以及怎样修复这个误差。

首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看:

0.1 => 0.0001 1001 1001 1001…(无限循环)

0.2 => 0.0011 0011 0011 0011…(无限循环)

双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。

下面是解决方法:为了避免产生精度差异,我们要把需要计算的数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂,大部分编程语言都是这样处理精度差异的,我们就借用过来处理一下 JS 中的浮点数精度误差。

也就是这样:

var a=0.1*10;
var b=0.2*10;
alert((a+b)/10)

就可以得到正确答案!

原文地址:https://www.cnblogs.com/hr2014/p/3635473.html