Web前端_JavaScript_01_数据类型&对象(基础)

数据类型

js里的数据类型分为两种:对象类型和原始类型 

对象(object)类型: 引用类型:数组,函数等等

  • Date
  • Array 
  • function
  • .......

原始类型:对象并且无方法的数据:null表示"没有对象",即该处不应该有值,undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

  • number
  • string
  • boolean
  • null
  • undefined

对象的概念

对象的概念:

以{}表示, 是属性和方法的集合(变量和function的集合),一个对象类型的实例,通过函数创建。对象都有一个__proto__属性,指向这个对象的构造函数原型对象(prototype属性)

对象的属性具有相应的权限:

对象的属性有权限,例如能不能被delete,查看等等,例如申明一个变量,变量就是基本类型的实例:  var a =1 ;b=1   其中, a不能被delete  隐性申明的b可以被delete  。可以在添加对象的属性时给它赋予权限属性,对象也拥有标签,可以通过Object来定义对象的权限:不能添加属性,不能删除修改等等

原型对象的概念:

该对象的父类,构造函数都有一个prototype属性,指向原型对象(原型对象在定义函数时同时被创建),__proto__和prototype属性的值都指向原型对象,一个是对象的属性,一个是函数的属性

对象的创建过程

执行如下代码

function co(){
    this.a = "i am a",
    this.alerta = function(){
        alert(this.a);
    }
}
//通过构造函数new对象
var test = new co();

那么,通过构造函数new对象的过程中,发生了什么?其实很简单,就四件事:
 

1. var obj = {};
2. obj._proto_ = co.prototype;
3. co.call(obj);
4. return obj;
  1. 创建一个空对象 obj
  2. 将这个空对象onj的成员属性_proto_指向了构造函数对象co的prototype成员属性(对象)
  3. 构造函数的作用域赋给新对象,因此co函数中的this赋值给新对象,因此co函数中的this指向obj,然后再调用co函数,于是obj就被赋值了成员对象a和alerta
  4. 返回新对象,当构造函数里包含返回语句时比较特殊

对象之间类型的比较

===:

  1. 类型不同 返回false  类型相同
  2. 类型相同,值也相同,大部分返回 true,也有特例。
  3. 特例:   null === null //true;  unefined === undefined  //true;  NaN === NaN  //false;  NaN是一种特殊的number类型,和任何类型 === 都返回false;   new  Object === new Object // false;    对象比较引用,除非两边是同一对象引用才会返回 true

==:

  1. 类型相同 和 === 一样
  2. 类型不同,先尝试转型,再进行比较,具体问题遇到再查询

对象类型的检测

typeof : 

一个一元运算,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。

  1. 不够精细,只能返回类型,如果要获取 Array 而非 Object 则实现不了,不能判断具体引用类型,但是为什么能拿到function对象
  2. 遇到null失效

instanceof : 

操作符,  a instanceof  Obiect ,左边必须是对象,否则返回false。

  1. 比typedef 更细,判断左边对象a的原型链(继承)的原型(父类)是否有右边这个构造函数的prototype对象属性
  2. 不可以跨ifram,window对象使用
  3. 简单来说就是判断该对象是哪种引用类型

Object.prototype.tostring.apply():

  1. 既能判断基本类型,也能判断引用类型(对象类型)
  2. 遇到Null,undefined会在IE678失效

对象的包装机制

var a = “string”; 
alert(a.length);    //6
a.t = 3;
alert(a.t);        //unefined

基本类型有自己对应的包赚对象,但是null和indefine是没有包装对象的 

基础类型a能够访问对象才有的a.length属性,是因为 js 给你做了一步操作:

var aa = new String(a),然后通过 aa这个临时的对象去访问属性,但是这个对象在执行完a.length会立刻销毁,所以访问a.t是unefined.也就是说基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失。

对象的序列化

将js对象转化成字符串:

  1. 通过JSON.stringify(obj) 实现
  2. jequery  ajax请求 自动将对象序列化了
  3. JSON.parse('{"x":1}') 将字符串转化为json格式对象

js对象自定义序列化:

  1. 对象内添加toJSON函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值