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

  

原文地址:https://www.cnblogs.com/Eyrum/p/4565705.html