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 相关文章推荐
js的表单操作 简单计算器
Dec 29 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
jQuery后代选择器用法实例
Dec 23 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
jQuery查找dom的几种方法效率详解
May 17 jQuery
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
通过Kettle自定义jar包供javascript使用
Jan 29 Javascript
小程序Scroll-view上拉滚动刷新数据
Jun 21 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 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
php curl 伪造IP来源的实例代码
2012/11/01 PHP
php实现数字补零的方法总结
2018/09/12 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
Python计算程序运行时间的方法
2014/12/13 Python
python三大神器之fabric使用教程
2019/06/10 Python
使用python接入微信聊天机器人
2020/03/31 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
python3让print输出不换行的方法
2020/08/24 Python
如何利用python发送邮件
2020/09/26 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
JNI的定义
2012/11/25 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
会计专业导师推荐信
2014/03/08 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
文体活动总结
2015/02/04 职场文书
2016新年年会主持词
2015/07/06 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫