JavaScript 基础知识系列:数据类型及slice(8,-1)

在基础类库中常见的slice(8,-1)是个什么鬼?下面就从js数据类型说起。

javascrip数据类型有两种:

  1. 基本类型:Undefined,Null,Boolean,Number,String
  2. 引用类型:
    • 第一类:原生对象:object,Array,Date,RegExp,Function以及有基本类型衍生出来的包装类型Boolean,Number,String;
    • 第二类内置对象(JS语言提供的不依赖于执行宿主的对象,如Global,Math)
    • 宿主对象(JS语言提供的任何依赖宿主环境的对象,如IE中的window,WS中的WScript实例,以及任何用户创建的类)

数据类型的判断方式:

1、typeof判断数据类型会返回一个字符串,如

 1 // Numbers
 2 typeof 37 === ‘number‘;
 3 typeof 3.14 === ‘number‘;
 4 typeof Math.LN2 === ‘number‘;
 5 typeof Infinity === ‘number‘;
 6 typeof NaN === ‘number‘; // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字"
 7 typeof Number(1) === ‘number‘; // 不要这样使用!
 8
 9 // Strings
10 typeof "" === ‘string‘;
11 typeof "bla" === ‘string‘;
12 typeof (typeof 1) === ‘string‘; // typeof返回的肯定是一个字符串
13 typeof String("abc") === ‘string‘; // 不要这样使用!
14
15 // Booleans
16 typeof true === ‘boolean‘;
17 typeof false === ‘boolean‘;
18 typeof Boolean(true) === ‘boolean‘; // 不要这样使用!
19
20 // Symbols
21 typeof Symbol() === ‘symbol‘;
22 typeof Symbol(‘foo‘) === ‘symbol‘;
23 typeof Symbol.iterator === ‘symbol‘;
24
25 // Undefined
26 typeof undefined === ‘undefined‘;
27 typeof blabla === ‘undefined‘; // 一个未定义的变量,或者一个定义了却未赋初值的变量
28
29 // Objects
30 typeof {a:1} === ‘object‘;
31
32 // 使用Array.isArray或者Object.prototype.toString.call方法可以从基本的对象中区分出数组类型
33 typeof [1, 2, 4] === ‘object‘;
34
35 typeof new Date() === ‘object‘;
36
37 // 下面的容易令人迷惑,不要这样使用!
38 typeof new Boolean(true) === ‘object‘;
39 typeof new Number(1) ==== ‘object‘;
40 typeof new String("abc") === ‘object‘;
41
42 // 函数
43 typeof function(){} === ‘function‘;
44 typeof Math.sin === ‘function‘;

typeof在针对 对象、日期、正则、数组上的判断并不准确,返回的都是“object”,因此,我们需要另外一种办法来准确判断数据类型。

2、Object.prototype.toString()

该方法返回描述某个对象数据类型的字符串,如自定义的对象没有被覆盖,则会返回“[object type]”,其中,type则是实际的对象类型。在使用该方法检测的时候,可以使用Object.prototype.toString.call()或者Object.prototype.toString.apply()进行测试,如

1 var toString = Object.prototype.toString;
2 toString.call(new Date);//[object Date]
3 toString.call(new String);//[object String]
4 toString.call(Math);//[object Math]
5 toString.call(undefined);//[object Undefined]
6 toString.call(null);//[object Null]

因此,引出Object.prototype.toString.call(obj).slice(8,-1),如

Object.prototype.toString.call(‘ESStudio balabala……‘);
//"[object String]"
Object.prototype.toString.call(‘ESStudio balabala……‘).slice(8,-1);
//"String"

slice(startIndex,endIndex),从0开始索引,其中8代表从第8位(包含)开始截取(本例中代表空格后面的位置),-1代表截取到倒数第一位(不含),所以正好截取到[object String]中的String。

结题。

原文地址:https://www.cnblogs.com/EFPlatform/p/10141360.html

时间: 2024-08-01 22:23:57

JavaScript 基础知识系列:数据类型及slice(8,-1)的相关文章

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的,解释型程序设计语言. js对大小写敏感,一定要采取一致的字符大小写形式,在js中的结束分号(:)是可选的,为了避免JS语句错误,我们还是要注意添加,养成良好的编写习惯. 下面看看数据类型和值. JS有7种数据类型:字符串.数字.布尔.数组.对象.Null.Undefined 字符串类型:由Unicode字符,数字,标点符号组成的序列,可以为多个字符,也可以为0个字符. 1 <script> 2 // var用于声明一个变量 3 var stri

JavaScript基础知识梳理----数据类型

JavaScript数据类型 JavaScript的数据类型有六大类: Undefined.null.string.number.object.boolean 1.Undefined    ---使用var声明变量但未初始化, 对未初始化的变量或尚未定义的变量使用typeof运算符均会返回undefined 问题: 区分空对象指针和尚未定义的变量 使用typeof检测,尚未定义的变量返回的是undefined,而空对象指针返回的是object 2.Null 逻辑上null表示一个空对象指针 使用

JavaScript基础知识(数据类型)

数据类型 布尔:true/fasle console.log(typeof true);// "boolean" Number : true -->1 false -->0 console.log(Number(true)); console.log(Number(false)); Boolean : 把其他数据类型转换布尔值: console.log(Boolean(12));//true console.log(Boolean(10));//true console.l

javascript 基础知识

javascript 基础知识编程规范注释 //驼峰对象化编程 数据类型字符串.数字.布尔.数组.对象.Null.Undefined定义 var carname=new String; var x= new Number; var y= new Boolean; var cars= new Array; var person= new Object; 字符串 var word = "Hello World!"; 数字 var x1 = 34.00; //使用小数点来写 var x2 =

JavaScript基础知识梳理--数组

JavaScript基础知识梳理--数组 1.创建方法 空数组:var obj=new Array(); 指定长度数组: var obj=new Array( size ); 指定元素数组 :  var obj=new Array( 元素1,元素2,....): 单位数组:var obj=new Array[ 元素1,元素2,元素3,...,元素N]; 多维数组:var a=new Array( [数组1],[数组2],[数组3],...,[数组N] ); 2.基本操作 存取数组元素: 单维数组

(1)JavaScript基础知识

Javascript基础知识 1.如何使用JavaScript (1).通过<script></script>中直接编写 (2).通过<script src='目标文档的URL'></script>链接外部的Js文件 ① <script  src="URL" type="text/javascript" charset="utf-8"></script> (3).作为某个元素

javascript基础知识拾遗

1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console.log(0||true); //true console.log(''||true); //true console.log(false||true); //true console.log(null||true); //true console.log(NaN||true); //true co

Javascript基础知识5

不要把相等运算符(==)与赋值运算符(=)搞混. 以&&运算符隔开的两个条件中的前者为错,则不会检测第二个条件的真假.利用这一点,可以提高脚本的速度. 使用带switch的多个条件 if(button=="next") window.location = "next.html"; else if(button=="previous") window.location = "pre.html"; else if(

线程基础知识系列(三)线程的同步

本文是系列的第三篇,前面2篇,主要是针对单个线程如何管理,启动等,没有过多涉及多个线程是如何协同工作的. 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 线程基础知识系列(一)线程的创建和启动  :线程的创建和启动,join(),daemon线程,Callable任务. 本文的主要内容 何谓线程安全? 何谓共享可变变量? 认识synchronized关键字 认识Lock synchronized vs Lock 1.何谓线程安全 多线程是把双刃剑,带