js数据类型和类型检测
基本数据类型:
undefined;null;boolean;number;string
这五种基本类型是按值访问的,因为可以操作保存在变量中的实际的值
引用数据类型:
object
引用数据类型是保存在内存中的对象,javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间,在操作对象时,实际操作的是对象的引用,而不是实际的对象(这种说法其实是不严谨的,当复制保存着对象的某个变量时,操作的是对象的引用。但是为对象添加属性时,操作的是实际的对象)
参数传递:
javascript中所有的函数都是按值传递的,所以当函数的形式参数(用ECMAscript的概念,就是arguments对象中的一个元素)是引用数据型时,它也是按值传递的:其方式复制一份该对象的地址给形参,记住不是引用
eg:
function addTen(num){ num+=10; return num; } var count=20; var result=addTen(count); alert(count); //20 值没有变化 其实就是当count把值复制给形参num时,就与count无关了 alert(result); //30
另一个例子:
eg:
function setNamea(obj){ obj.name:"monica"; } var person={}; setNamea(person); alert(person.name); //"monica" 它们只是用了同一个地址,虽然它是按值传递的但效果和引用传递时一样的,所以常被错误的认为是引用传递
看看这个例子:
eg:
function setNameb(obj){ obj.name="monica"; obj = new Object(); obj.name="Green"; } var person={}; setnameb(person); alert(person.name); //monica(闭包)
检测类型:typeof和instanceof
var a=undefined; alert(typeof a); //undefined var b=null; alert(typeof b); //object var c=true; alert(typeof c); //boolean var d=1; alert(typeof d); //number var e="monica"; alert(typeof e); //string var f=new Object(); alert(typeof f); //object
instanceof返回的是true或则false
var person{}; alert(person instanceof Object); //instanceof is a object? true alert(person instanceof Array); //instanceof is a Array? false alert(person instanceof RegExp); //instanceof is a RegExp? false