博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 基础知识系列:数据类型及slice(8,-1)
阅读量:7061 次
发布时间:2019-06-28

本文共 2410 字,大约阅读时间需要 8 分钟。

在基础类库中常见的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 // Strings10 typeof "" === 'string';11 typeof "bla" === 'string';12 typeof (typeof 1) === 'string'; // typeof返回的肯定是一个字符串13 typeof String("abc") === 'string'; // 不要这样使用!14 15 // Booleans16 typeof true === 'boolean';17 typeof false === 'boolean';18 typeof Boolean(true) === 'boolean'; // 不要这样使用!19 20 // Symbols21 typeof Symbol() === 'symbol';22 typeof Symbol('foo') === 'symbol';23 typeof Symbol.iterator === 'symbol';24 25 // Undefined26 typeof undefined === 'undefined';27 typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量28 29 // Objects30 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

你可能感兴趣的文章
ITIL图示
查看>>
NFS服务器搭建
查看>>
Android Toast.makeText用法
查看>>
C#模拟HTTP请求并发送二进制
查看>>
疯狂出逃办公室2
查看>>
03-我们怎样编写Product Backlog
查看>>
洛谷1466 集合
查看>>
C#耗时操作防界面卡死
查看>>
第三章 poj 1064——关于带精度的二分法
查看>>
安卓表格布局android:collapseColumns,android:shrinkColumns和stretchColumn
查看>>
序列模型(2)-----循环神经网络RNN
查看>>
jquery简单实现点击弹出层效果实例
查看>>
TOSSIM进行无线传感网络仿真的大致流程
查看>>
微信内打开链接显示已停止访问该网页
查看>>
基于servlet和jsp的简单注册登录页面(包括:增删查改及分页显示)
查看>>
数据结构基础之一
查看>>
10.29随笔
查看>>
ScintillaNET v2.5 简单应用实例讲解
查看>>
I.MX6 Android busybox 从哪里生成的
查看>>
SIM800C 透传模式
查看>>