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的返回保证了代码继续执行。

  1. 只要涉及NaN的操作,都会返回NaN
  2. 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

  1. 详情请谷歌搜索原因,这里不解释 ↩︎

  2. 来自javascript高级程序设计(中文第三版)第26页。 ↩︎

  3. 来自javascript高级程序设计(中文第三版)第28页。 ↩︎

  4. javascript高级程序设计(中文第三版)第33页底部有解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值