JS系列 5 - 数据类型 1
基本数据类型
undefined (未定义的)
按照js语法规范创建了一个变量,但没有对此变量赋值,这个变量就会含有一个 undefined。这里的 undefined 即指所赋的值,也指此值的 数据类型。
//创建一个新的变量,但是这个变量是空的
var newVariable;
//打印 newVariable 的赋值
console.log(newVariable);//返回 undefined
//检测 newVariable 的数据类型
console.log(typeof newVariable);//返回 undefined
如果你还是不甘心,也可以试试这个;
这个结果与上面的代码一样,但是我们真的没有必要这么写。
//创建一个新的变量,但是这个变量是空的
var newVariable = undefined;
//打印 newVariable 的赋值
console.log(newVariable);
//检测 newVariable 的数据类型
console.log(typeof newVariable);
你还可以试试这个,你会发现此时你所谓赋值的 ‘undefined’ 的数据类型 不再是 undefined了,是不是和你想的不一样?
//创建一个新的变量,但是这个变量是空的
var newVariable = 'undefined';
//打印 newVariable 的赋值
console.log(newVariable);
//检测 newVariable 的数据类型
console.log(typeof newVariable);
undefinded这个数据类型 只有一个值,就是 undefiend。
undefined 怎么用?(不建议信任,这是个人愚见)
这里需要一点全局作用域的知识。
当你想在一个函数中可以用到一个变量,而且可以更改它的赋值,你就可以利用 undefined 特性了。
在全局的作用域中,创建一个变量, 你就可以在函数中用了。
//创建一个 全局 undefined 变量
var globalVariable;
//更改 globalVariable 的赋值并打印
function testOne(){
globalVariable = 7;
console.log(globalVariable);
}
//调用 testOne 函数检验是否更改成功
testOne();//返回 7
//更改 globalVariable 的赋值并打印
function testTwo(){
globalVariable = '10';
console.log(globalVariable);
}
//调用 testTwo 函数检验是否更改成功
testTwo();//返回 '10'
null (空的)
null只有一个值,就是 null。
但是 null 是一个 object类型,就是对象。1
//创建一个新的变量,赋值为 null
var newVariable = null;
//打印 newVariable 的赋值
console.log(newVariable);//返回null
//检测 newVariable 的数据类型
console.log(typeof newVariable);//返回object
null怎么用?
如果定义的变量准备在将来用于保存对象,建议将改变量的初始值设置为null,而不是其他值,这样以来,只要检查这个变量是不是null就可以知道它是否已经保存了一个对象的引用。2
//创建一个变量 car 将来用于引用其他对象
var car = null;
//创建两个对象 volvo 和 geely
var volvo = {brand:'Volvo',color:'white'};
var geely = {brand:'geely',color:'red'};
//给变量 car 引用volvo
if(car == null){
car = volvo;
console.log(car);//会打印
}
//给变量 car 引用 geely
if(car == null){
car = geely;
console.log(car);//不会打印,因为car 已经不是 null 了
}
console.log(car);//会打印 volvo
boolean (对错/布尔)
就是 true 和 false, 要小写
可是boolean远远没有这么简单啊!在js中所有类型的值都和boolean有等价的值。
举个例子:
//声明一个 变量 message
var message = 'hello';
//用 Boolean() 方法来转换
var messageAsBoolean = Boolean(message);
// 打印出转换后的值,是true 还是 false呢?
console.log(messageAsBoolean);//答案是 false
其实吧,我们写代码的时候,解析器有时会自动转换
//声明一个 变量 message
var message = 'hello';
// 判断流程,如果message是true 打印出一个字符串
if(message){
console.log('message 是一个 true 值');
}
在上面的代码中,我们没有用 Boolean(message) 这个方法;
message在 if 函数中,自动被转换为true了。关于更多转换,请看下一章节。
boolean的用法(个人记录,你就随便看看)
就目前我的水平而言,发现boolean可以帮我们写出下面的巧妙精简代码,比如
//声明一个 变量 message
var message = 'hello';
// 判断流程,如果message是true 打印出一个2
message && console.log(2);
number (数字)
number可以是整数也可以是小数/浮点数;可以是十进制,八进制还有十六进制。
在计算机计算的时候,各种进制的数都会被转换为十进制。
在js中,整数 0 和 负数 0 ( 0 , -0 )是相等的!
说说浮点
浮点数就是我们小学所说的带小数点的数字
var floatNum1 = 1.5;
var floatNum2 = -1.5;
var floatNum3 = .5; //不要这么玩
浮点比整数多占内存啊!
假设计算机内存保存整数需要1个内存格,那么保存浮点数的时候,就需要2个内存格了。为了节省内存,js会将有些浮点数转换为整数保存。
var floatNum1 = 1.; //由于小数点后没有数字,此数字会变成 1
var floatNum2 = 10.0; //常识来说,这就是个整数,所以也会变成10
e
var floatNum = 2.345e4; // 等于 2.345 * 10的7次方 = 23450
浮点的精度
浮点的最高精度是17位小数,计算时其精度远远不如整数。比如 0.1 + 0.2 !=0.3,所以建议我们在做 是否相等判断 的时候,不要用浮点数。3
数值范围
由于内存的限制,js不能保存世界上的所有数值;
最小的数值,Number.MIN_VALUE, 在大多数浏览器中,是 5e-324;
最大的数值,Number.MAX_VALUE, 在大多数浏览器中,是 1.7976931348623157e+308;
如果某次计算的值超过了这两个范围,数值就会被自动转换为 Infinity 和 -Infinity。
Infinity 和 -Infinity 无法参与到下一次的计算。
isFinite()这个方法可以帮助我们判断我们想要计算的数值有没有超过范围。
什么是NaN
Not A Number 就是 NaN;
当要返回一个数值时,却没有可以返回的数值时,就会返回NaN。在其他语言中,这种情况会返回error,但是js不会返回error。NaN的返回保证了代码继续执行。
- 只要涉及NaN的操作,都会返回NaN
- NaN 与任何值都不相等,包括 NaN自己
isNaN() ?
此方法在接受到一个参数后,会把参数转换为数值。当参数不能被转换为数值时,isNaN() 就会返回 true
string (字符串)
string 用双引号 或者 单引号 表示;单双引号不可以混用!
//单引号 string
var name1 = 'Tom';
//双引号 string
var name2 = "Tom";
// 他们相等吗?
console.log( name1 == name2); //返回true, 他们相等
不是普通的字符怎么办?
比如换行?你想打印 (
Tom
Jerry)。
这时你需要在两个单词之间添加一个换行!这时你就需要用到转义序列/非打印字符了
转义序列 的例子有 换行,单双引号,斜杠等
/*打印 (
* Tom
* Jerry)
*/
var name2 = "Tom\nJerry";
// 查看打印的对吗
console.log(name2);
代码里面的 \n 就是转义字符中的一种,其他的转义序列请谷歌。
字符串是有长度的
你可以通过 变量.length 来查看字符串的长度
//创建一个变量 test
var test = 'test';
//查看变量 test 的长度
console.log(test.length); //返回4
其实字符串是不可以被改变的
//创建一个变量 test
var test = 'test';
//尝试改变字符串的值
test = 'new test';
//查看变量 test 的长度
console.log(test); //返回 new test
那为什么test的值还是变了呢?
因为 解析器 在后台帮助了我们。4
怎样检测数据是什么类型?
用 typeof 操作符啦!
//定义一个变量 numberOne
var numberOne = 7;
//定义一个变量 numberTwo
var numberTwo = '7';
//定义一个变量 numberThree
var numberTheree;
//定义一个变量 numberFour
var numberFour = null;
//检验两个变量的数据类型
console.log(typeof numberOne);//会返回 number
console.log(typeof numberTwo);//会返回 string
console.log(typeof numberThree);//会返回 undefined
console.log(typeof numberFour);//会返回 object