javascript基本类型详解


Posted in Javascript onNovember 28, 2014

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语言的基础,一定要了解清楚才行。

Javascript 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
jQuery中ScrollTo用法示例
Sep 04 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
深入理解JS中的Function.prototype.bind()方法
Oct 11 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 Javascript
js+css实现全屏侧边栏
Jun 16 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 Javascript
javascript中数组array及string的方法总结
Nov 28 #Javascript
20条学习javascript的编程规范的建议
Nov 28 #Javascript
20个实用的JavaScript技巧分享
Nov 28 #Javascript
js获取浏览器基本信息大全
Nov 27 #Javascript
jQuery实现多按钮单击变色
Nov 27 #Javascript
jQuery的ready方法详解
Nov 27 #Javascript
javascript 面向对象封装与继承
Nov 27 #Javascript
You might like
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
vue组件创建的三种方式小结
2020/02/03 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
用Python写冒泡排序代码
2016/04/12 Python
Python中字典和集合学习小结
2017/07/07 Python
单利模式及python实现方式详解
2018/03/20 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
python支持多线程的爬虫实例
2019/12/21 Python
python函数超时自动退出的实操方法
2020/12/28 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
Python实现疫情地图可视化
2021/02/05 Python
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
大学生实习期自我评价范文
2013/10/03 职场文书
专科毕业生自我鉴定
2013/12/01 职场文书
银行员工辞职信范文
2014/01/20 职场文书
法律七进实施方案
2014/03/15 职场文书
MySQL之DML语言
2021/04/05 MySQL