JS-数据类型详解

之前我们说到数据结构,那是针对计算机科学的,适用所有开发语言,今天要说的JS数据类型,当然只针对JavaScript而言,大家不要混淆。

JS数据类型分为两大类:

一、值类型(基本类型)

字符串(String)、
数字(Number)、
布尔(Boolean)、
空(Null)、
未定义(Undefined)、
Symbol
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

二、引用数据类型(对象类型):

对象(Object)、
数组(Array)、
函数(Function),
还有两个特殊的对象:
正则(RegExp)和日期(Date)

JavaScript 拥有动态类型

JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:

var x;               // x 为 undefined
var x = 5;           // 现在 x 为数字
var x = "John";      // 现在 x 为字符串

变量的数据类型可以使用 typeof 操作符来查看:

typeof "John"                // 返回 string
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof null                   // 返回 object
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

最后两行可以看出, typeof无法具体区分引用数据类型。
这时可以使用

Object.prototype.toString.call(1);  // [object Number]
Object.prototype.toString.call('1');  // [object String]
Object.prototype.toString.call([]);   // [object Array]
Object.prototype.toString.call({});   // [object Object]
Object.prototype.toString.call(null)  // [object Null]
Object.prototype.toString.call(undefined) // [object Undefined]

String

字符串是存储字符(比如 “Bill Gates”)的变量。
字符串可以是引号中的任意文本。您可以使用单引号或双引号:

var carname = "Volvo XC60";
var carname = 'Volvo XC60';

您可以在字符串中使用引号,只要不匹配包围字符串的引号即可:

var answer = "It's alright";
var answer = "He is called 'Johnny'";
var answer = 'He is called "Johnny"';

Number

JavaScript 只有一种数字类型。数字可以带小数点,也可以不带:

var x1 = 34.00;      // 使用小数点来写
var x2 = 34;         // 不使用小数点来写

极大或极小的数字可以通过科学(指数)计数法来书写:

var y = 123e5;      // 12300000
var z = 123e-5;     // 0.00123

Boolean

布尔(逻辑)只能有两个值:true 或 false。

var x = true;
var y = false;

Symbol

JavaScript中的Symbol是一种特殊的数据类型,它是一种原始数据类型,表示独一无二的值。在JavaScript中,每个Symbol值都是唯一的,不会相等。Symbol通常用作对象属性的标识符。使用Symbol可以创建一个唯一的属性名,避免属性名冲突。
对于应用开发者,Symbol 可以有这样的使用场景:你从某第三方代码获得了一个对象,你想在该对象上存储自己的属性,但该第三方代码是不透明的,或者不受你控制,所以你无从得知第三方代码会在该对象上设置什么属性,此时就可以使用 Symbol key 属性,既能确信不会和已有属性冲突,也能确信第三方代码不会意外地修改你设置的属性;

注意:
1、for in / of循环、Object.keys、Object.values无法读取Symbol
2、Symbol只能用[]读取,.不行
3、Symbols 也被排除在外JSON.stringify()输出,这使得它们非常适合存储最终用户不应该看到的纯程序数据。
4、Symbol是基本数据类型!!!!不要加new哦
5、后面括号可以传入一个字符串,只是一个标记,方便我们阅读,没有任何意义,类型转化的时候不可转化为数值
6、没有两个 Symbols 永远相等 。 即使两个 Symbols 具有相同的描述,它们也不相等

可以遍历到symbol的方法:
Object.getOwnPropertySymbols() :返回对象中只包含symbol类型key的数组
Reflect.ownKeys() :返回对象中所有类型key的数组(包含symbol)

// 创建一个Symbol
const symbol = Symbol('number');
console.log(typeof symbol); // 输出:symbol
  let obj = {
    [symbol]: 110,
    name: 'li'
  };
  console.log(obj[symbol]); // 110
  // 遍历对象的Symbol属性名
  const symbolKeys = Object.getOwnPropertySymbols(obj);
  console.log(symbolKeys);  // 输出:Symbol(number)
  console.log(symbolKeys[0]);  // 输出:Symbol(number)

  const allKeys = Reflect.ownKeys(obj);
  console.log(allKeys);  // 输出 ['name', Symbol(11)]

Array

下面的代码创建名为 cars 的数组:

var cars = new Array();
cars[0] = "Saab";
cars[1] = "Volvo";
cars[2] = "BMW";

或者 (condensed array):

var cars = new Array("Saab","Volvo","BMW");

或者 (literal array):

var cars = ["Saab","Volvo","BMW"];

数组下标是基于零的,所以第一个项目是 [0],第二个是 [1],以此类推。

Object

对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔:

var person = { firstname: "John", lastname: "Doe", id: 5566 };

上面例子中的对象 (person) 有三个属性:firstname、lastname 以及 id。
空格和折行无关紧要。声明可横跨多行

var person={
	firstname: "John",
	lastname : "Doe",
	id:  5566
};

对象属性有两种寻址方式:

let name = person.lastname;
let name = person["lastname"];

Undefined 和 Null

Undefined 这个值表示变量不含有值。
可以通过将变量的值设置为 null 来清空变量。

cars = null;
person = null;

之前我们的例子中有一个 typeof null 返回 object,null是一个对象吗?

可以说null不是一个对象。但是我们通过 typeof 可以发现它输出是一个Object。那这是为什么呢?

Javascript的值实质是由两部分组成,一部分表示类型的标签实际的数据值构成的。对象的类型标签为0。而null表示空指针,在大多数平台下表示(0x00),即null的标签类型也就变为了0,所以typeof就错误的返回了object。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值