JS的数据类型大类

					### JavaScript的八种数据类型

原始值五种:Number,String,Boolean,Null,undefined
引用值:Object(包含Array,Function,Date)

检查变量类型的方法

(1)typeof

主要用于判断数据是不是原始值:String、Number、Object、Null、Undefined,但是无法判断出function(有些浏览器会出错)、array、regExp

console.log(typeof '');//string
console.log(typeof []);//object
console.log(typeof {});//object
console.log(typeof 1);//number
console.log(typeof null);//object
console.log(typeof undefined);//undefined
console.log(typeof true);//boolean
console.log(typeof function(){});//function
console.log(typeof /\d/);//object

typeof的返回值共有七种:

number, boolean, string, undefined, object, function,symbol.

1、number

typeof(10);
typeof(NaN);
//NaN在JavaScript中代表的是特殊非数字值,它本身是一个数字类型。
typeof(Infinity);

2、boolean

typeof(true);
typeof(false);

3、string

typeof("abc");

4、undefined

typeof(undefined);
typeof(a);//不存在的变量

5、object

对象,数组,null返回object
typeof(null);
typeof(window);

6、function

typeof(Array);
typeof(Date);

7、symbol

typeof Symbol() // ES6提供的新的类型

(2)instanceof
主要的目的是用来检测引用值,判断Array和RegExp,无法准确判断Function

console.log([] instanceof Array);//true
console.log({} instanceof Object);//true
console.log(/\d/ instanceof RegExp);//true
console.log(function(){} instanceof Object);//true
console.log(function(){} instanceof Function);//true
console.log('' instanceof String);//false
console.log(1 instanceof Number);//false

(3)Object.prototype.toString
折是对象的一个原生原型扩展函数,用来精确的区分数据类型

var type=Object.prototype.toString
console.log(type.call(''));//object String																							
console.log(type.call([]));//object Array
console.log(type.call({}));//object Object
console.log(type.call(false));//object Boolean
console.log(type.call(null));//object Null
console.log(type.call(undefined));//object Undefined
console.log(type.call(function(){}));//object Function
判断方式
console.log(type.call('')=="[object String]");//true

ES6提供的新类型symbol

作为JavaScript的第六种原始值

为什么要用symbol?

ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入Symbol的原因。

用法
var mySymbol = Symbol();
// 第一种写法
var a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
var a = {
  [mySymbol]: 'Hello!'
};
// 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上写法都得到同样结果
a[mySymbol] // "Hello!"
//mySymbol就是你要添加的属性名但是又怕起冲突的名字 看一眼代码是不是觉得很简单啦
有哪些注意事项?

Symbol函数前不能使用new命令因为它是一条单身狗 没有对象的它是一种类似于字符串的数据类型。
Symbol值不能与其他类型的值进行运算,会报错,但是可以显示的转换为字符串以及转换为布尔值
Symbol 作为属性名,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是,它也不是私有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol属性名。

其他类型转成字符串: toString()

toLocaleString 方法

通俗的说就是转成想要的各种语言环境形式
用于返回格式化对象后的字符串,该字符串格式因不同语言而不同。可以通过传参决定返回的语言与具体的表现,某些场景下相当有用,语法如下:

object.toLocaleString([locales [, options]]);

locales 参数用于指定格式化对象时使用的语言环境,默认为当前环境的语言,可以不传。该参数具体可选的值可以参考这里,一般而言使用 en 或 zh 即可应付绝大多数情况。例子如下:

const date = new Date();
date.toLocaleString('zh');    // 2018-4-4 15:08:38
date.toLocaleString('en');    // 4/4/2018, 3:08:38 PM
const num = 2333333;
num.toLocaleString('zh', { style: 'currency', currency: 'CNY' });    //¥2,333,333.00
num.toLocaleString('zh', { style: 'currency', currency: 'cny', currencyDisplay: 'code' });      //CNY2,333,333.00
num.toLocaleString('zh', { style: 'currency', currency: 'cny', currencyDisplay: 'name' });      //2,333,333.00人民币
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值