JS面试的那些事1--------JS的数据类型

1.基本数据类型:

Js基本数据类型一般分为五种:string、boolean、number、null和undefined。我们可以使用typeof来检测不同的数据类型。很多时候,我们将null归结为是一种object类型。

    var str="字符串";
    var istrue=true;
    var num=25;
    var undef=undefined;
    var nul=null;
    console.log(typeof str);//string
    console.log(typeof istrue);//boolean
    console.log(typeof num);//number
    console.log(typeof undef);//undefined
    console.log(typeof nul);//object

 (1)undefined类型:

  当变量已经声明,但是没有获得定义,或者变量被定义成undefined、检测一个并没有声明过的变量时,三种情况下,typeof返回的都是undefined,因此我们可以看出,typeof并不能正确的检测数据类型。尤其是对于那些声明未赋值和未声明的变量。

    var undef=undefined;
    var undef2;
    console.log(typeof undef);//变量声明后,被赋值为undefined
    console.log(typeof undef2);//变量声明后,没有赋值
    console.log(typeof undef3)//变量并没有声明

 (2)null类型:

  在使用typeof检测null类型时,返回的是object。从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因。

  此外,null在不规范的相等检测时,返回的为true。在大部分的时候,我们都没有必要将变量声明为undefined。

  var nul=null;
    console.log(typeof nul);//null表示的是一个空对象的指针,因此typeof检测返回的是object

2.引用类型:

在ECMAScript中,Object表示就是一组数据和功能的集合。从定义中我们可以看出数组肯定是Object类型。

    var obj=new Object();
    var obj2=[‘1‘,‘2‘];
    var obj3=new Date();
    var obj4=/[0~9]/;
    console.log(typeof obj);//Object类型
    console.log(typeof obj2);//数组
    console.log(typeof obj3);//日期类型
    console.log(typeof obj4);//正则类型

3.类型检测:

在上一节中我们使用typeof来进行类型检测,但是在检测null和undefined类型的时候,typeof的弊端已经显现无遗。typeof的弊端不仅仅表现在此时,试想,当我们检测两种不同的Object类型的数据时,如何区分不同的对象类型。例如:

    var person={};
    var lists=[‘a‘,‘b‘,‘c‘];
    console.log(typeof person);//object
    console.log(typeof lists);//object

ECMAScript中提供了另一个类型检测的方法instanceof。Instanceof主要用来对象之间的类型检测,例如如下我们定义一个构造函数,Person返回的是一个Person对象:

    var list=[‘a‘,‘b‘,‘c‘];
    function Person(name,age){
        this.name=name;
        this.age=age;
    };
    var Cowen=new Person(‘Cowen‘,27);
    console.log(list instanceof Array);//true
    console.log(Cowen instanceof Person);//true

针对基本数据类型我们使用typeof来判断数据类型,而对于对象类型object,我们使用instanceof。是否存在一种盘点方法让我们既可以判断基本类型页可以判断引用类型呢?

当然是存在的,我们可以利用单体类型的构造器constructor来判断数据类型,对于基本数据类型,其对应的单体类型一般为String、Number、Boolean,而引用类型中,数组对应的单体对象为Array,而其他对象都会对应的有各自的构造器constructor。

    var str="字符串";
    console.log(str.constructor==String);//字符串
    var list=[];
    console.log(list.constructor==Array);//数组
    function Person(){};
    Person.prototype={
        constructor:Person,
        name:"no",
        age:18
    }
    var Cowen=new Person();
    console.log(Cowen.constructor==Person);//对应的Person

当然,对于所有的元素,我们都可以使用toString()方法,因此可以利用call传递参数来判断元素的原始类型。

    var str="字符串";
    var list=[];
    function Person(){};
    Person.prototype={
        constructor:Person,
        name:"no",
        age:18
    };
    var Cowen=new Person();
    var getType=function(obj){
        return Object.prototype.toString.call(obj);
    };
    console.log(getType(str));//[object String]
    console.log(getType(list));//[object Array]
    console.log(getType(Cowen));//[object Object]

4.类型转换:

js中常见的类型转换一般是基本类型之间的转换,尤其以数字类型的转换尤多,因此我们只考虑数字之间的转换。数字类型转换的函数有两个number()、parseInt()。二者之间有很大的区别:

对于null,number()转换返回的是0,而parseInt()返回的是NaN。

对于undefined类型,二者返回的都是NaN。

    var str="123kkk";
    console.log(Number(str));//NaN
    console.log(parseInt(str));//123

    console.log(Number(undefined));//NaN
    console.log(parseInt(undefined));//NaN

    console.log(Number(null));//0
    console.log(parseInt(null));//NaN

NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。针对NaN 的这两个特点,ECMAScript 定义了isNaN()函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。

小结:


1.js基本数据类型一般分为五种:string、boolean、number、null和undefined。


2.null 值表示一个空对象指针,null是object类型。


3.类型检测一般存在三种方法:

(1)使用typeof检测基本数据类型;

(2)使用instanceof检测引用类型;

(3)使用constructor构造器判断元素对应的基类型;

(4)使用toString()方法来判断。

时间: 2024-10-10 21:34:52

JS面试的那些事1--------JS的数据类型的相关文章

Node.js 面试问题及答案(2017 版)

阅读原文 两年前,我们发布了我们的第一篇关于 Node.js 面试的文章 Node.js 面试常见问题和答案,近两年,JavaScript 和 Node.js 生态系统有了很多更新和发展,因此,是该更新这些面试问题和答案的时候了. 免责声明(重要) 仅仅通过面试问题去评价一个面试者,从来都不是一个好的选择.但是这些问题可以让你大体了解面试者在 Node.js 开发上的经验. 当然,这些问题并不能全面反映一个人的思维方式和开发习惯. 我相信,开发中遇到的问题,更能反映面试者的知识水平 - 所以,我

js面试中长见的算法题(转载)

js面试中长见的算法题 1.阐述下 JavaScript 中的变量提升 所谓提升,顾名思义即是 JavaScript 会将所有的声明提升到当前作用域的顶部.这也就意味着我们可以在某个变量声明前就使用该变量,不过虽然 JavaScript 会将声明提升到顶部,但是并不会执行真的初始化过程.2.阐述下 use strict; 的作用 use strict; 顾名思义也就是 JavaScript 会在所谓严格模式下执行,其一个主要的优势在于能够强制开发者避免使用未声明的变量.对于老版本的浏览器或者执行

js 面试知识点

基础           原型  原型链 作用域  闭包 异步  单线程 JS API        DOM操作 AJAX 事件绑定 开发环境    版本管理 模块化 打包工具 运行环境    页面渲染 性能优化 面试题 1.JS中使用 typeof 能得到的哪些类型? 考点:JS变量类型 JS中有哪些内置函数 JS变量按照存储方式区分为哪些类型,并描述其特点 值类型      内存地址 不会因为赋值而相互干预 引用类型   指针  节省内存空间   可以无限制扩展属性 如何理解JSON 知识点

學習 React.js:用 Node 和 React.js 創建一個實時的 Twitter 流

Build A Real-Time Twitter Stream with Node and React.js By Ken Wheeler (@ken_wheeler) 簡介 歡迎來到學習 React 的第二章,該系列文章將集中在怎麼熟練並且有效的使用臉書的 React 庫上.如果你沒有看過第一章,概念和起步,我非常建議你繼續看下去之前,回去看看. 今天我們準備創建用 React 來創建一個應用,通過 Isomorphic Javascript. Iso-啥? Isomorphic. Java

.NET面试的那些事

最近跳槽,面试了好几家公司,当然由于本菜鸟实力有限,公司都是小公司,这个不必多说.直接进入正题. (面试题无排序和类型区分,想到就写,所有答案均是自己的理解,有错误的话请批评指正,本文并非面试题集合) 第一题:用C#写冒泡排序.这个是基础中的基础,如果这个都写不出来,那sorry,你out了.如果真的不知道怎么写的,在网上搜搜吧,说实话我当时面试写错了,后来看了看在后面的面试中又出现了.所以,这个面试题一定要看.当然可以在扩展一下,除了冒泡排序,还有其他的排序方法,再此不多做解释. 第二题:Se

js动态加载css和js

js动态加载css和js用处挺多,特意提出来 var loadUtil = { /* * 方法说明:[动态加载js文件css文件] * 使用方法:loadUtil.loadjscssfile("http://libs.baidu.com/jquery/1.9.1/jquery.js","js") * @param fileurl 文件路径, * @param filetype 文件类型,支持传入类型,js.css */ loadjscssfile:function(

创业笔记-Node.js入门之JavaScript与Node.js

JavaScript与Node.js JavaScript与你 抛开技术,我们先来聊聊你以及你和JavaScript的关系.本章的主要目的是想让你看看,对你而言是否有必要继续阅读后续章节的内容. 如果你和我一样,那么你很早就开始利用HTML进行“开发”,正因如此,你接触到了这个叫JavaScript有趣的东西,而对于JavaScript,你只会基本的操作——为web页面添加交互. 而你真正想要的是“干货”,你想要知道如何构建复杂的web站点 —— 于是,你学习了一种诸如PHP.Ruby.Java

query-1.6.4.js与jquery-1.6.4.min.js有什么不同?

有两个版本的 jQuery 可供下载: Production version - 用于实际的网站中,已被精简和压缩. Development version - 用于测试和开发(未压缩,是可读的代码) 这两个版本都可以从 jQuery.com 下载. 一般用不带min的调试功能.调试通过后用带有min的运行 提示:您可以把下载文件放到与页面相同的目录中,这样更方便使用. 如果您不希望下载并存放 jQuery,那么也可以通过 CDN(内容分发网络) 引用它. Microsoft CDN:<head

js调用php和php调用js的方法举例

js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="text/javascript" src="b.php?action=test"></script> <script type="text/javascript" > alert(jstext); </script> 在b