javascript基础 -- 判断对象类型 对象的深拷贝

在javascipt中,有array数组对象,object对象,正则对象,函数对象,typeof只能判断是对象,但是却不能判断属于何种对象。

记录一个方法用来判断对象属于那种对象:

使用Object.prototype.toString.call(elem).toLowerCase() 获取对象的类型,再使用 == 来判断是否该类型的对象。

看下图,对象是引用类型的值,所以当赋值一个对象的时候,不能象普通类型一样赋值,因为在引用类型赋值后,修改对象的值会直接修改到引用类型中的值,所以,赋值一个对象的时候,如果后面修改了对象的值,赋予过该对象的变量都会被修改。

所以,拷贝数据的时候,需要深拷贝:

//判断一个是不是JSON对象,1.对象是没长度的,2.类型是对象3.判断是对象的那个类型:object,object
function isJSON(elem){
  console.log(typeof elem);
  console.log(!elem.length);
  console.log(Object.prototype.toString.call(elem)===‘[object object]‘);
  return typeof elem === "object" && !elem.length && Object.prototype.toString.call(elem).toLowerCase()=="[object object]";
}
//判断是不是数组
function isArray(elem){
  if(Array.isArray){
     return Object.prototype.toString.call(elem).toLowerCase() == ‘[object array]‘;
  }else{
    console.log(1);
     return Array.isArray(elem);
  }
}

function isSimpleType(elem){
  return typeof elem === "string" || typeof elem === ‘number‘|| typeof elem === ‘boolean‘;
}

function deepCopyJSON(json){
  if(!isJSON(json)){return ;}
  var newJSON = {};
  for(var key in json){
    if(isJSON(json[key])){
      newJSON[key] = deepCopyJson(json[key])
    }else if(isArray(json[key])){
      newJSON[key] = deepCopyArray(json[key])
    }else{
      newJSON[key] = json[key];
    }
  }
  return newJSON;
}

function deepCopyArray(arr){
  if(!isArray(arr)){return ;}
  var newArr = [];
  console.log(‘isArr‘);
  for(var i=0;i<arr.length;i++){
    if(isJSON(arr[i])){
      // console.log(0);
      newArr[i] = deepCopyJSON(arr[i]);
    }else if(isArray(arr[i])){
      newArr[i] = deepCopyArray(arr[i]);
    }else{
      console.log(0);
      newArr[i] = arr[i];
    }
  }
  return newArr;
}

function deepCopy(obj){
  var newObj;
  if(isArray(obj)){
    newObj = deepCopyArray(obj);
  }else if(isJSON(obj)){
    newObj = deepCopyJson(obj);
  }
  return newObj;
}
    var json1 = {
      ‘a‘:1,
      ‘b‘:‘string‘,
      ‘c‘:true,
      ‘d‘:{
        ‘a‘:11,
        ‘b‘:true,
        ‘c‘:{
          ‘aa‘:false,
          ‘bb‘:‘字符‘
        }
      },
      ‘e‘:[1,4,5,{a:‘555‘,‘b‘:‘hahahah‘}]
    };
    var arr1 = [1,4,‘dddd‘,{‘a‘:‘a‘,‘b‘:‘b‘},[11,33,44,55,{‘t‘:‘t‘,‘y‘:‘y‘}]];

    var arr2=deepCopyArray(arr1);  //arr2[4][4].t=3;   //arr1[4][4].1  输出t

  

时间: 2024-11-04 22:40:52

javascript基础 -- 判断对象类型 对象的深拷贝的相关文章

JavaScript客户端判断文件类型及大小

<html><head><title>潜水式无堵塞排污泵</title> <meta http-equiv="content-type" content="text/html;charset=gb2312"></head><body>以下是一个客户端控制file上传图片类型和大小的示例(注意:由于是客户端限制,所以用户可以绕过这个限制):<script language=&qu

javascript基础编程の变量、对象、数据类型及函数

在web标准中.网页由结构.表现形式和行为三个部分组成. 结构标准---->XHTML: 表现形式标准----->CSS: 行为标准----->javascript: javascript是一种专门设计用来给网页添加交互性的编程语言,最初由Netscape公司开发.最后提交给了欧洲计算机制造商协会(ECMA).    一.javascript特点: 1.javascript是一门解释型语言,这意味着javascript代码不须要预先编译就能够运行. 2.javascript不能脱离浏览器

从零开始学习前端JAVASCRIPT — 4、JavaScript基础Math和Date对象的介绍

Math对象的介绍 1:Math对象 Math 对象用于执行数学任务.并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math().您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法. 2:Math属性 PI:返回圆周率(约等于3.14159). 3:Math方法 Math.round(3.6);   // 四舍五入. Math.random();     // 返回大于等于0到小于1之间的随机数. // 随机数如何设定范围 // 0 - 100(包含)

JavaScript中判断变量类型最简洁的实现方法(#################################)

这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是number类型. 复制代码代码如下: 1 2 3 function isNumber(obj) {     return typeof obj === 'number' } 这个函数对于整数和浮点数都没有问题,但对于NaN值也返回true这让

javascript基础集锦_Json——浏览器对象(十一)

(1)浏览器对象navigator JavaScript可以获取浏览器提供的很多对象,并进行操作. navigator对象表示浏览器的信息,最常用的属性包括: navigator.appName:浏览器名称: navigator.appVersion:浏览器版本: navigator.language:浏览器设置的语言: navigator.platform:操作系统类型: navigator.userAgent:浏览器设定的User-Agent字符串. 请注意,navigator的信息可以很容

javascript基础六(事件对象)

1.事件驱动 js控制页面的行为是由事件驱动的. 什么是事件?(怎么发生的) 事件就是js侦测到用户的操作或是页面上的一些行为 事件源(发生在谁身上) 引发事件的元素 事件处理程序(发生了什么事) 对事件处理的程序或函数 事件对象(用来记录发生事件时的相关信息)  只有在事件发生的时候,才会产生事件对象,无法手动创建,并且事件对象只能在处理函数内部访问,处理函数允许结束后该对象自动销毁 事件的分类: 鼠标事件: onclick        单击 ondblclick     双击 onmous

JavaScript基础学习之-自定义对象(2)

自定义对象 一.定义类或对象1.工厂方式创建对象car 1 var oCar = new Object; 2 oCar.color = "red"; 3 oCar.doors = 4; 4 oCar.mpg = 23; 5 oCar.showColor = function(){ 6 alert(this.corlor); 7 }; 8 9 创建多个car 10 function createCar(color, doors, mpg) { 11 var tempcar = new O

Javascript基础知识盲点总结——对象

一.定义对象的基本格式: var hero = { breed: 'Turtle', occupation: 'Ninja', talk: function(){ alert("A!!"); } author: { firstname: 'Martin', lastname: 'Lu' } } 属性名加不加引号都可以,但是当属性名有保留字或特殊字符(空格等)时,需要加引号 二.对对象属性的操作 可以随时为对象添加/删除属性或者方法: var hero = {}; hero.breed

JavaScript基础 null:object 类型,转成bool类型是 :false Boolean()系统函数

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut