javascript的变量类型(图)
javascript的变量类型真的很要人纠结,即使你是很有经验的js工程师,你也很难说清楚js的类型和分类。 最近在讲javascript入门指南的时候,有人提出数组为什么不是基本类型,我通过演示typeof []的结果来说明,数组是对象类型派生出来的,而不是六种基本类型。 其实要理解javascript的变量类型很简单,就是我们要找到一个划分的标准。 javascript变量类型分类在很多书中都提到了javascript的变量类型,每本书都有不同的划分标准,如果按照typeof和instanceof的返回值来区分,可以把javascript的变量类型分为两套类型系统:基本类型和对象类型衍生出来的对象类型系统。 var a = new Number(123); console.log(a.valueOf()===123);//true var b = new String(123); console.log(b.valueOf()===123);//false console.log(b.valueOf()==='123');//true obj.valueOf()返回的是该对象的原始值。 值类型和引用类型
值类型示例var a = 123; var b = a; a = 1; console.log(b);//123 引用类型示例var c = [1,2,3]; var d = c; d[0] = 4; console.log(c);//[4,2,3] 值类型和引用类型解释看见上面的示例,有些人可能就晕了,很多人一不小心就改变了引用类型的值,而自己还不清楚程序出现了什么问题! var c = {site:'js8.in'}; var d = c; var e = d.site; d.site = 'weibo.com'; console.log(e);//js8.inarguments的值 ECMAScript中函数的参数是按值传递的,当参数为引用类型值时便按引用传递是一种错误或者不全面的说法。 对于参数为基本类型值的情况,很容易理解。但对于引用类型值的参数,却很容易让人误解为是按引用传递的。如下面的例子: function fn(arg){ arg.site = 'js8.in'; arg = new Object(); arg.site = 'weibo.com'; } var obj = new Object(); fn(obj); console.log(obj.site)//js8.in console.log(window.arg);//undefined 示例中,如果arguments是按照引用类型传递的,那么obj.site应该为weibo.com,但是结果却是js8.in。 事实是这样的:当参数为引用类型值时的确是按引用传递的。 最后来一张周爱民大神的javascript类型关系图: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |