目录
利用typeof测定数据类型
对一个值使用 typeof 操作符可能返回下列某个字符串:typeof的返回结果一定是一个字符串
"undefined"——如果这个值未定义;
"number" -----如果这个值是数字类型;
"boolean"——如果这个值是布尔值;
"string"——如果这个值是字符串;
"number"——如果这个值是数值;
"object"——如果这个值是对象或 null;
"function"——如果这个值是函数。
注意点1:null 有时会被当作一种对象类型,但是这其实只是语言本身的一个 bug,即对 null 执行typeof null 时会返回字符串 "object"。实际上,null 本身是基本类型
注意点2:从技术角度讲,函数在 ECMAScript 中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过 typeof 操作符来区分函数和其他对象是有必要的。
题1.typeof 返回值
console.log(typeof typeof 95);
结果分析:结果为 string。 typeof 95 的返回结果是 number,而number这是一个字符串,所以typeof number 结果就是string 。(95是数字型数据,所以返回结果是number,但是number是一串字符,外层的typeof是对这串字符判断类型,所以最终返回结果是string)
题2.typeof 返回值
var a = 100;
a = a + 21;
var b = a % 19;
var re = typeof b;
console.log(re);
结果分析:结果为 number ,不管前面怎么算,b变量一定是一个数字型数据,而typeof返回值就是前面7个单词字符串中的一个,所以是"number" 。typeof b 返回值是字符串"number",然后赋值给re
var re = "number"
所以打印出的re结果就是字符串的内容 number
如果再求 typeof re,就是typeof "number",返回值就是"string",所以
打印结果就是 string
数据类型
在计算机中,不同的数据类型所需要占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。简单来说,数据类型就是数据类别型号。
不同数据类型在底层中的形式:
数据类型在底层都是以二进制形式表示的,二进制的前三位为 0 会被 typeof 判定为对象类型,null为全0所以会被误判为"object",
000 - 对象,数据是对象的应用
1 - 整型,数据是31位带符号整数
010 - 双精度类型,数据是双精度数字
100 - 字符串,数据是字符串
110 - 布尔类型,数据是布尔值
变量的数据类型:
变量是用来存储值得所在处,它们有名字和数据类型。变量得数据类型决定了如何将代表这些值得位存储到计算机内存中。JavaScript是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行过程中,类型会根据存入的数据而被自动确定(跟C语言,java不同,注意!!)
1.变量只声明 不赋值 undefined
var a;
console.log(a); //undefined
结果分析:undefined 变量a未定义 或者 定义了变量但是没有初始化,取值取得的是什么就不清楚,所以是undefined
var a;
console.log(a); //a未赋值,undefined
a = 20; //给a赋值后
console.log(a); //20
2.number数据
eg:
var n1 = 20;
n1 = 100;
n1 = n1 + 1.2; //n1取值100,然后把100跟1.2做加法运算,然后把运算的结果给n1
console.log(n1);
1.在JS中,小数与小数之间运算有精度。
eg:0.1 + 0.2 =0.3 ,但是在js中
log(0.1+0.2); //0.30000000000000004
例子验证:
var a = 0.1;
var b = 0.2;
if (a + b == 0.3) {
alert("You got 0.3 测试11111"); //不运行
}
console.log("---------------------------");
//解决方法
//转化成整数进行计算
var a = 0.1;
var b = 0.2;
if ((a * 10 + b * 10) / 10 == 0.3) {
alert("You got 0.3 测试2222"); //运行
}
总结:js不能用于一些科研运算,可以用作一般互联网产品,因为运算有精度
2.求余 % 常用(不会越界)
var a = 10;
var b = 3;
var c = a%b; //所得的结果c一定是小于b的(余数c一定小于b)
3.保留小数的几位小数 用 toFixed()
var a = 3.1415926;
var b = a.toFixed(2); //a保留2位小数
console.log(b); //3.14
注意点:保留小数要遵循四舍五入
var a = 3.1415926;
var b = a.toFixed(3); //a保留3位小数
console.log(b); //3.142
结果分析:保留3位小数,应该是3.141,但第4位小数为5,要进行四舍五入,所以第3位小4数变为2,结果为3.142
4.开发中,保留指定小数(重要)
思想是:先把小数变成整数,再计算
需求:若要求保留两位小数,且若第2位小数为0,就不显示,第一位小数为0也不显示,若两位小数都不为0,正常显示 ,若第一位小数不为0,第二位为0,只显示第一位小数
方法:to.Fixed(2)*100/100; 若是三位小数to.Fixed(3)*1000/1000.。。。
//第二位小数为0就不显示
var a = 15141.3;
var b = 123;
var c = a/b;
console.log(c);
var d = c.toFixed(2)*100/100;
/* 核心思想:除数为整10/100等时,方便没有用处的小数位的取舍
c.toFixed(2)--> 123.10
c.toFixed(2)*100-->12310 这里小数变成了整数
c.toFixed(2)*100/100-->123.1 就成功取出了第二位小数0,只保留了第一位非0小数
*/
console.log(d);
5.向上/下取整 和 四舍五入取整
向上取整:Math.ceil()
向下取整:Math.floor()
四舍五入取整:Math.round()
var a = 100.45;
var b = Math.ceil(a); //向上取整 101
var c = Math.floor(a); //向下取整 100
var d = Math.round(a); //四舍五入取整 100
console.log(b);
console.log(c);
console.log(d);
6.number型进制
八进制 0~7 程序里面数字前面加上 0 表示八进制
var num = 010; //表示八进制
console.log(num); //010转换为10进制就是8
注意:console.log(); 默认打印的是十进制
十六进制 0~9 a b c d e f 数字前面加 0x 就是十六进制
var num1 = 0xA;
console.log(num1); //变为10进制的10
7.number型范围
(1)最大值:Number.MAX_VALUE,值为:1.7976931348623157e+308
(2)最小值:Number.MIN_VALUE,值为:5e-324
(3)特殊值:Infinity 无穷大 -Infinity 无穷小 NaN 代表一个非数字
console.log(Number.MAX_VALUE*2); //Infinity已经最大值了再乘一个2就是无穷大
console.log(-Number.MAX_VALUE*2) // 无穷大的反面就是无穷小 -infinity
console.log('hh开心' - 100); //NaN 结果不是一个数字型
(4)IsNaN() :用来判断一个变量是否为非数字的类型。非数字型为true,数字型为false。
console.log(isNaN('好老师啊')); // true 好老师啊为非数字,所以未true