基础一:JS数据类型
*本文章主要总结一下js数据类型的识别判断方法
tyoeof
instanceof
Object.prototype.toString.call
constructor
最后封装一个函数,可以判别所有的类型*
1.数据类型
基本类型:
- Undefined类型:该类型只有一个值,即
undefined(小写)
,在使用var声明变量但是未对其加以初始化时,这个变量的值就是undefined。 - Null类型:该类型也只有一个值,即
null(小写)
,null值表示一个空对象指针,所以用typeof操作符检测null值会返回object的原因。 - Boolean类型:改类型有两个值:
true和false(小写)
。 - Number类型:表示整数和浮点数
- String类型:即字符串
引用类型
- Object类型:即对象
- Array类型:数组
- Date类型:日期
- RegExp类型:正则
- Function类型
2.类型的识别的判断方法
(1)typeof总结:
首先typeof不是方法,只是一个操作符。
- 可以识别标准类型(
Null除外
) - 不能识别具体的对象类型(
Function除外
) -
返回的值首字母都是小写
!!!!!!!!
//识别标准类型
typeof "jerry"; //"string"
typeof 12; //"number"
typeof true; //"boolean"
typeof undefined; //"undefined"
typeof null; //"object"
typeof {name:"jerry"}; //"object"
//识别引用类型
typeof function(){}; //"function"
typeof []; //"object"
typeof new Date; //"object"
typeof /\d/; //"object"
//创建一个自定义对象
function Person(){};
typeof new Person; //"object"
(2)instanceof
//能够判别引用类型
[] instanceof Array; //true
/\d/ instanceof RegExp; //true
new Date instanceof Date; //true
var a = function(){};
a instanceof Function; //true
//不能判别原始类型
1 instanceof Number; //false
"jerry" instanceof String; //false
//能够判别自定义对象类型及父子类型
//自定义类型
function Person(){};
Person instanceof Function; //true
//父子类型
function Point(x,y){
this.x = x;
this.y = y;
}
function Cirele(x,y,r){
Point.call(this,x,y);
this.radius = r;
}
Circle.prototype = new Point();
Circle.prototype.constructor = Circle;
var c = new Circle(1,1,2);
c instanceof Circle //true
c instanceof Point //true
结论
:
- 可以判别内置对象类型
- 不能判别原始类型
- 判别自定义对象类型
- 结合1和3,用instanceof可以识别所有的对象类型
(3)Object.prototype.toString.call
Object.prototype.toString.call("123"); //"[object String]"
//封装函数,并做截取
function type(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
}
//测试
type("123"); //"String"
//自定义类型
function Point(x,y){
this.x = x;
this.y = y;
}
//测试
type(new Point(1,2)); //"Object"
结论:
- 上述封装的函数可以识别基本类型以及引用对象类型
- 不能识别自定义对象类型
(4)constructor(构造这个对象的构造函数的本身)
//判断基本类型(基本类型也有构造函数);但是null和undefined除外,它俩没有构造函数
"jerry".constructor === String; //true
(1).constructor ===Number; //true
//判断引用类型
new Date().constructor === Date; //true
[].constructor === Array; //true
//判断自定义对象
function Person(name){
this.name = name;
}
new Person("jerry").constructor === Person; //true
//对constructor判别进行方法的封装
function getConstructorName(obj){
return (obj===undefined||obj===null)?obj:
(obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1]);
}
封装的原理:
- obj:假如传入的参数是null或者undefined,没有构造函数直接返回
- obj.constructor如果存在执行&&后面的语句
- obj.constructor.toString():将类型对应的构造函数转化成字符串 "Function Number(){code...}"
-
math(/function\s*([^(]*)/)[1]
:匹配构造函数的名称,正则匹配
结论:
- 判别基本类型(Undefined/Null除外)
- 判别引用类型
- 判别自定义对象类型
结论:所以可以封装一个函数getConstructorName判断所有类型,但是这个函数返回的除了null和undefined是小写之外,其他的首字母都是大写。
前端学习
在路上,beat generation
推荐阅读
补全一段jQuery代码
主要思路是,window.$ = jQuery所以window.jQuery要等于一个函数,这个函数接收一个参数,返回一个对象,返回的对象包含两个方法,这两个方法可以添加text文本和添加class类
yangdepp赞 3阅读 1.1k
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...
寒青赞 56阅读 8.5k评论 11
JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...
jenemy赞 48阅读 7.1k评论 12
从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...
乌柏木赞 75阅读 7.1k评论 16
再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...
libinfs赞 42阅读 6.8k评论 12
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...
乌柏木赞 45阅读 8.6k评论 6
从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...
乌柏木赞 35阅读 6.7k评论 10
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。