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 相关文章推荐
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
Sep 08 Javascript
JSON 编辑器实现代码
Dec 06 Javascript
jquery 经典动画菜单效果代码
Jan 26 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
用JavaScript实现类似于ListBox功能示例代码
Mar 09 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
Mar 21 jQuery
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
vue.js+element-ui动态配置菜单的实例
Sep 07 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
php编程每天必学之表单验证
2016/03/01 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
JS实现图片切换效果
2018/11/17 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
浅谈django中的认证与登录
2016/10/31 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
虚拟机下载python是否需要联网
2020/07/27 Python
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
网络程序员自荐信
2014/01/25 职场文书
小学教师办公室制度
2014/02/03 职场文书
个人自荐材料
2014/05/23 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
就业意向协议书
2015/01/29 职场文书
导游词300字
2015/02/13 职场文书
整改通知书格式
2015/04/22 职场文书
学术会议领导致辞
2015/07/29 职场文书
科级干部培训心得体会
2016/01/06 职场文书
解析MySQL索引的作用
2022/03/03 MySQL