变量类型

JavaScript中有七中内置类型:number(数字)、string(字符串)、boolean(布尔)、null(空值)、undefined(未定义)、object(对象)、symbol(符号,ES6中才有)。

注意:变量没有类型,但它们持有的值有类型

null 空值

null 属于空值类型。

任何值我们都可以通过typeof来确定它的类型,但是也有特殊情况。

typeof undefined === 'undefined'; // true
typeof true === 'boolean'; //true
typeof 123 === 'number'; // true
typeof 'abcd' === 'string'; // true
typeof [1, 2, 3] === 'object'; //true
typeof Symbol() === 'symbol'; // true
typeof null === 'object'; // true

根据上面这7中类型查看,问题出现了,null属于空值类型,正确来说,typeof null === 'null', 为什么typeof 值的类型是object呢? 这就是属于JavaScript的一个bug了,并且存在了20多年,已经无法修复,我们只要记着就好了。

undefined 未定义

undefined 属于未定义类型。

undefined 与 null 的区别

通常情况下我们会将undefinednull 混淆, 但是它们传达的意思都差不多,但是也还是有些细微差别。

undefined 值从未赋值

null指曾赋过值,但是目前没有值
undefined 与 undeclared
var a;
console.log(a); // undefined
console.log(b); // ReferenceError: b is not undefined

变量在未持有值的时候为undefined , 而 undeclared 表示b is not undeclared, 变量没有被定义。注意:undefinedis not undeclared 是两回事儿。

string 字符串

string 属于字符串类型。

在JavaScript中字符串是不可变的。不可变是指字符串的成员函数是不会改变其原来的值,而是会创建一个新的字符窜。

number 数字

JavaScript中只有一种数值类型:number,包括“整数”和带小数的十进制数。

JavaScript中没有真正意义上的整数,目前只有数字。

定义方式:

var a = 23;
var b = 23.4;
// 数字前面的0可以省略
var c = 0.23;
var d = .23;
// 小数点最后边的0可以省略
var f = 23.0;
var g = 23.;
精确度

JavaScript中的浮点数存在一定的精确度。

0.1 + 0.2 === 0.3; // false;

从数学角度说,上例中的返回值改为true,可为什么是false呢?

二进制浮点数中0.1和0.2并不是十分精确,他们相加的结果并非刚好等于0.3,而是一个比较接近0.3 的数字0.30000000000000004, 所以结果为false。

boolean 布尔

boolean 属于布尔类型,确只有两个值true 或者 false

转换为false 的情况:

null
undefined
0
-0
''
NaN
false

除了上面这几种情况外,其他都将为true

object 对象

object 属于对象类型,对象中主要包括数组、函数、自定义对象等。

在JavaScript中函数是属于object类型,是object 的一个子类型。

typeof function a() {...} === 'object'; //true

下面这种特殊情况注意:

var a = {};
var b = {};
a === b;  // false

虽然a、b都是空对象,但是两个对象并不是同一个对象,所以不相等。

symbol 符号

symbol 属于符号类型,ES6新增的基本数据类型。符号是具有唯一性的特殊值(并非绝对)。用它来命名不容易导致重名。

var mysym = Symbol('my own symbol');
mysym; // Symbol('my own symbol')
typeof mysym; // symbol

var a = [];
a[mysym] = 'foobar';

Symbols和其它基本类型大不一样。

从创建开始就是不可变的。你不能为它设置属性(如果你在严谨模式下尝试,会报类型错误)。它可以作为属性名。这是它的类字符串性质。

var sym = Symbol('3'); 

'your symbol is ' + sym; // TypeError: can't convert symbol to string

`your symbol is ${sym}`;  //TypeError: can't convert symbol to string

你可以通过显示地将symbol转换为一个字符串来避免这个问题,通过String(sym)或者sym.toString()。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值