javascript基本类型详解

js中一共5个原始值,6个typeof能判断的,9个原生的内置的构造函数。

  这569,构成了js语言的基础。

   5个原始值是:数字,字符,布尔,null,undefined

   typeof能判断:数字,字符,布尔,object,function,undefined。 注意null和数组,tyopeof都输出object。

typeof不能区分出数组和对象,如何判断类型呢?使用Object.prototype.toString.apply()。

if(value&&typeof value ==='object'&&value.constructor === Array)

上面的检测如果在不同帧和窗口创建的数组,会给出false,window对象不一样了.

可靠的方法是if(Object.prototype.toString.apply(value)==="[object  Array]")

arguments 数组不是一个数组,他只是一个有着length成员属性的对象。
   如下面例子所示 arguments不是普通的array

代码如下:

var a = function (){
      var b = Object.prototype.toString.apply(arguments);
      console.log(b);

}
a();//输出[object Arguments]

代码如下:

var a = function (){
      var c = [];
      var b = Object.prototype.toString.apply(c);
      console.log(b);

}
a();//输出[object Array]

instanceof是如何判断是否实例

prototype里面的属性有constructor.

默认的prototype属性是一个object对象,可以设置为任何复杂值,忽略设置为原始值.

虽然他尽是一个对象,但他是特殊性的,圆形链将每个实例都链接至其构造函数的prototype属性。实例与构造函数的 prototype属性之间有一个隐蔽的链接,这就是实例的__proto__。同时实例的constructor属性是通过构造函数prototype的constructor拿到的。

但是要保留constructor,这样可以让new的实例有constructor的属性,也可以使用instanceof来判断。

代码如下:

var Foo = function(){}

Foo.prototype={constructor:Foo}

var FooInstance = new Foo;

FooInstance.__proto__=== Foo.prototype;//true

FooInstance.constructor === Foo; //true

实际上instanceof判断不是依据constructor,而是依据原型链判断,如下面例子

代码如下:

var Foo = function(){};
 Foo.prototype={};
 var FooInstance = {};
 FooInstance.__proto__=Foo.prototype;
 console.log(FooInstance instanceof Foo);//true

使用原始值,不使用构造函数

哪些值算是false:false,"",null,0,-0,NaN,undefined,这些算是false其他都是true

但是请注意下面这个例子

代码如下:

    var a = Boolean(false);
        var b = new Boolean("");
        if (a ){console.log(a);}//无法输出
        if (b ){console.log(b);}//Boolean {[[PrimitiveValue]]: false} new 一个相当于一个对象了,就不是false

上面的文章理论性稍强了一些,不过这些都是构成javascript语言的基础,一定要了解清楚才行。

(0)

相关推荐

  • javascript基本包装类型介绍

    为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean.Number和 String.这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据. 一.基本包装类型概述 var box = 'Mr. Lee';//定义一个字符串 var box2 = box.substring(2);//截掉字符串前两位 alert(box2);//

  • JavaScript中“基本类型”之争小结

    前端面试中常被问到的问题之一就是"JavaScript的基本类型有几种?". 有的回答"数字.字符串.布尔",有的可能会再加上"Null.Undefined".而有人可能认为"object"也是基本类型.到底是什么样呢? 所谓"基本类型(primitive types)"的概念ECMAScript(V3,V5)中压根就没有,它只是将类型分为6种. ECMAScript只提到类型,用types表示,在V3,V

  • JavaScript类型系统之基本数据类型与包装类型

    写在前面的话 javascript的数据类型可以分为两种:原始类型和引用类型 原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中(按值访问).其中,javascript基本数据类型包括Undefined.Null.Boolean.Number和String五种 引用类型由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此其存储在堆(heap)中,存储在变量处的值是一个指针,指向存储对象的内存处(按址访

  • JavaScript数据类型之基本类型和引用类型的值

    ECMAScript变量包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基本类型还是引用类型.基本类型包括如Undefined.Null.Boolean.Number和String,这5种基本类型数据类型是按值访问的,因此可以操作保存在变量中的实际的值:引用类型类型的值是保存在内存中的对象.与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内

  • Javascript中的包装类型介绍

    最近不看犀牛书了,那本翻译的特烂而且好拗口,尤其是原型那块说的乱七八糟,后来经同事介绍,买了本js高级程序设计,然后就继续苦逼的看,不吐槽了,继续说说js中有新鲜感的包装类型.  一:String 说到String类型,蛮有意思,平时我们都是这样定义一个string类型,如下图: 但是在js中有一点非常特别,那就是string类型是属于基本类型,不属于引用类型,那就说明string的值是保存在"栈"上面的,而很多语言不是这样,比如C#,我觉得js不作为引用类型也是情有可原,毕竟它玩不了

  • 浅谈javascript中基本包装类型

    为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean.Number和String.这些类型与本章介绍的其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据.如下例子: 复制代码 代码如下: var s1="some text"; var s2=s1.substring(2); 这个例子中的变量s1包含一个字符串,字符串当然是

  • 浅析JavaScript基本类型与引用类型

    对于 JavaScript 类型,可以简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言:有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内存中保存了一个指向实现位置的指针. 市面上很多书都有不小的篇幅在讲.这篇文章会讲几个方面,这些方面可能会需要你对 JavaScript 已经有了一些简单的了解,特别是 JavaScript 的类型.如果还不一解,可以随手拿起一本关于 JavaScript 的书翻翻,再来看本文. 一.基本类型与引

  • javascript面向对象包装类Class封装类库剖析

    javascript是个入门门槛很低的语言,甚至一个从来没有接触过javascript的技术人员,几小时内就可以写出一个简单有用的程序代码. 但是如果因此你就下结论:javascript是门简单的语言.那你就大错特错了.想写出高性能的代码,同样需要具备一个高级程序员的基本素养. 一个java或者c++程序员,不一定能写出高性能的javascript代码,但更容易写出高性能的javascript代码. javascript的简单是基于它"胸襟广阔"的包容性.它声明时,不需要指定类型,甚至

  • Ext对基本类型的扩展 ext,extjs,format

    1. Array indexOf(Object o):Number 方法 remove(Object o):Array 方法 2. Date Javascript对日期时间的操作是不太方便的,而Ext在此基本上加入了比较多的扩展.比较重要的有: add(String interval,Number value):Date 方法 其中interval表示要加入的周期,有效的字符串为 ms--------表示毫秒 s-----------表示秒 mi---------表示分钟 h----------

  • javascript基本类型详解

    js中一共5个原始值,6个typeof能判断的,9个原生的内置的构造函数. 这569,构成了js语言的基础. 5个原始值是:数字,字符,布尔,null,undefined typeof能判断:数字,字符,布尔,object,function,undefined. 注意null和数组,tyopeof都输出object. typeof不能区分出数组和对象,如何判断类型呢?使用Object.prototype.toString.apply(). if(value&&typeof value ==

  • Javascript类型系统之String字符串类型详解

    javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列 字符串类型常被用于表示文本数据,此时字符串中的

  • javascript类型系统_正则表达式RegExp类型详解

    前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换.本文将介绍正则表达式的RegExp对象,以及正则表达式涉及 到的属性和方法 对象 javascript中的正则表达式用RegExp对象表示,有两种写法:一种是字面量写法:另一种是构造函数写法 Perl写法 正则表达式字面量写法,又叫Perl写法,因为javascript的正则表达式特性

  • JavaScript类型系统之布尔Boolean类型详解

    前面的话 布尔值Boolean类型可能是三种包装对象Number.String和Boolean中最简单的一种.Number和String对象拥有大量的实例属性和方法,Boolean却很少.从某种意义上说,为计算机设计程序就是与布尔值打交道,作为最基本的事实,所有的电子电路只能识别和使用布尔数据.本文将介绍布尔Boolean类型 定义 布尔Boolean类型表示逻辑实体,它只有两个值,保留字true和false,分别代表真和假这两个状态 Boolean包装类型是与布尔值对应的引用类型,在布尔表达式

  • Kotlin 语言中调用 JavaScript 方法实例详解

    Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J

  • Python的语言类型(详解)

    Python 是强类型的动态脚本语言 . 强类型:不允许不同类型相加 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译 强类型语言和弱类型语言 1.强类型语言:使之强制数据类型定义的语言.没有强制类型转化前,不允许两种不同类型的变量相互操作.强类型定义语言是类型安全的语言,如Java.C# 和 python,比如Java中"int i = 0.0;"是无法通过编译的: 2.弱类型语言:数据类型

  • JavaScript WeakMap使用详解

    WeakMap 对象是一组键/值对的集合,其中的键是弱引用的.其键必须是对象,而值可以是任意的. 语法 new WeakMap([iterable]) 参数 iterable Iterable 是一个数组(二元数组)或者其他可迭代的且其元素是键值对的对象.每个键值对会被加到新的 WeakMap 里.null 会被当做 undefined. 描述 WeakMap 的 key 只能是 Object 类型. 原始数据类型 是不能作为 key 的(比如 Symbol). Why WeakMap? 在 J

  • JavaScript Reduce使用详解

    学会这一个技巧 Reduce 让你开启编程新世界 Learning This Reduce Skill and a Whole New World Will Open up for You

  • JavaScript事件概念详解(区分静态注册和动态注册)

    js中的事件 什么是事件?事件是电脑输入设备与页面进行交互的响应,我们称之为事件 事件类型 鼠标单击:例如单击button.选中checkbox和radio等元素:鼠标进入.悬浮或退出页面的某个热点:例如鼠标停在一个图片上方或者进入table的范围: 键盘按键:当按下按键或释放按键时: HTML事件:例如页面body被加载时:在表单中选取输入框或改变输入框中文本的内容:例如选中或修改了文本框中的内容: 突变事件:主要指文档底层元素发生改变时触发的事件,如DomSubtreeModified(DO

  • JavaScript原型链详解

    目录 1.构造函数和实例 2.属性Prototype 3.属性__proto__ 4.访问原型上的方法 5.构造函数也有__proto__ 6.构造函数的原型也有__proto__ 7.Object.prototype这个原型对象很特殊 8.总结 1.构造函数和实例 假设你声明一个方法叫做Foo() ,那么我们可以通过new Foo()来声明实例. function Foo() { console.log("我是一个构造方法"); } const f1 = new Foo(); 现在你

随机推荐