javascript对象学习笔记一

一、Object作为构造函数使用时,可以接收一个参数,

  1.如果这个参数是原始类型的值时则返回改值这个值对应的包装对象

Object(123);
//    Number {[[PrimitiveValue]]: 123}

  2.如果这个参数是一个对象,那么直接返回传入对象

Object({
  name:‘创一代‘
});

//    Object {name: "创一代"}

然后可以利用接收一个对象返回原对象的特性就可以判断变量是否是对象类型

/**
 * 判断变量是否是一个对象
 * @param value
 * 传入参数
 * @returns {boolean} true:value是对象,反之不是对象
 */
function isObject(value) {
    return value === Object(value)
}
console.log(isObject([1,2]))    //  true
console.log(isObject({name:‘创一代‘})) //  true

二、Object.prototype.toString可以得到一个实例对象的构造函数,为了防止小伙伴在对象上自定义toString方法覆盖掉Object.prototype.toString,我们通过函数的call方法可以在任意值上调用Object.prototype.toString方法,如此我们可以来写一个比typeof更牛逼的类型判断函数

/**
 * 传任意参数返回参数类型
 * @param value
 * @returns {string}    返回值都是字符串,和typeof一样
 */
function getType(value) {
    var o = Object.prototype.toString.call(value)
    return o.match(/\[object (.*)\]/)[1].toLowerCase()
}
getType(1)  //  "number"
getType(‘null‘) //  "string"
getType(null)   //  "null"
getType({}) //  "object"
getType(function(){})   //  "function"
getType(new Date()) //  "date"
getType()   //  "undefined"
getType(/创一代/)  //  "regexp"getType([]) //  "array"

三、好了,有了获取数据类型的函数之后呢,我们写一个专门用于判断某种数据类型的功能,事先用文字描述再下手写代码

  1、先举个例子,比如说判断一个对象是否是数组?我们可以用Array.isArray(arr)来判断

var arr = [];
Array.isArray(arr);    //    true

  2、好,那么我们就getType方法加上isXXX方法

  3、isXXX方法我们不可能一个一个的写,所以我们的XXX方法应该是一个数组或者是个JSON对象,可以配置,我们这里呢就直接定义一个数组吧,数组名为type

/**
 * 准备类型数据
 * @type {string[]}
 */
var type = [‘Null‘,
    ‘Undefined‘,
    ‘Object‘,
    ‘Array‘,
    ‘String‘,
    ‘Number‘,
    ‘Boolean‘,
    ‘Function‘,
    ‘RegExp‘,‘Infinite‘
];

  4、想办法来实现类似于:getType.isXXX(value);getType是个方法,方法本身也是一个对象,访问对象属性的方式有两种(我知道的就两种哈),那就是点(".")操作符和类似访问数组元素的"[]",[]操作符有个好处就是属性名可是动态的也可以是不规范的,在这里我们的属性刚好是动态加上去的,所以我们利用这些便利来构建我们getType.isXXX(value)

  5、可能上面的说的有点乱哈,基本上就这些思路,下面用代码实现

type.forEach(function (t) {
    /**
     * 用于判断某种数据类型
     * @param o
     * 待判断的变量
     * @returns {boolean}
     * 判断结果,true/false
     */
    getType[‘is‘ + t] = function (o) {
        return getType(o) === t.toLowerCase()
    }
})
getType.isArray([]) //  truegetType.isArray({}) //  falsegetType.isUndefined()   //  truegetType.isUndefined(1)  //  false
 
时间: 2024-11-06 12:45:01

javascript对象学习笔记一的相关文章

JavaScript对象-学习笔记

JavaScript权威指南学习笔记,禁止转载! 5.对象 对象的属性是无序的,每个属性都有一个字符串key和值value, 数据属性的标签:writable.enumerable.configurable.value 访问器属性的标签:enumerable.configurable.get.set.get表示属性可读,set表示属性可写.属性前面有下划线表示只能通过对象方法get/set访问的属性,也就是访问器属性. (1)创建对象 1)字面量var obj={x:1,y:2}; 2)new:

javascript对象学习笔记

多的不说,直接上练习例子: 1.对象的属性.创建.构造函数.方法 <html xmlns="http://www.w3.org/1999/xhtml"> <body> <script type="text/javascript"> //函数:用作对象的方法 function Rectangle_area() {return this.width * this.height;} function Rectangle_perimete

JavaScript闭包学习笔记

原文:JavaScript闭包学习笔记 闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. 1 var n=999; 2 3 function f1() { 4 alert

javascript面向对象学习笔记(二)——创建对象

javascript面向对象学习笔记(二)--创建对象 工厂模式 该模值抽象了创建具体对象de过程.用函数来封装噫特定接口创建对象的细节. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var person1=createPerson("Chiaki&

JavaScript正则表达式学习笔记之一 - 理论基础

自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月??.当时信誓旦旦说的定期写篇博客的计划也就泡汤了??,不过好在最近有空,顺便总结一下这两个月遇到的几个问题.第一个问题就是项目中用到了一些正则才发现之前被自己忽略的正则是时候补一补了.恰逢今天周六??,就把自己学习JavaScript正则表达式的笔记整理成文,写了这篇关于正则表达式理论基础的文章,希望本文能对有需要的同学提供帮助.号外:本文相对基础,大神请忽略??. 一. 基本概念 正则表达式是用于匹配字符串中字符组合的模式. 一种几乎可

Javascript MVC 学习笔记(一) 模型和数据

写在前面 最近在看<MVC的Javascript富应用开发>一书,本来是抱着一口气读完的想法去看的,结果才看了一点就傻眼了:太多不懂的地方了.只好看一点查一点,一点一点往下看吧,进度虽慢但也一定要坚持看完.本学习笔记是对书上所讲解内容的理解和记录. 笔记里的代码大多会按书上摘录下来,因为<MVC的Javascript富应用开发>是结合了JQuery库,所以对于JQuery中不太懂的知识点也会附在代码后面,也算是一些额外的收获. MVC概述 要学习MVC,首先得知道MVC是什么,MV

JavaScript正则表达式-学习笔记(不定期更新)

JavaScript权威指南学习笔记,禁止转载! 8.正则表达式 在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 使用: /\d\d\d/.test("123");  //true new RegExp("Bosn").test("Hi,Bosn");  //true 正则基础: . 任何字符(除换行符以外) /-/.test('[email prote

JavaScript新手学习笔记(一)

1.JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getElementbyID 是不同的. 同样,变量 myVariable 与 MyVariable 也是不同的. 2.空格 JavaScript 会忽略多余的空格.您可以向脚本添加空格,来提高其可读性.下面的两行代码是等效的: var name="Hello";var name = "

Javascript MVC 学习笔记(三) 视图和模板

模板 Javascript中模板的核心概念是,将包含模板变量的HTML片段和Javascript对象做合并,把模板变量替换为对象中的属性值. 书中讲到了几种库作为模板引擎,但是链接失效了,可以在这里下载,链接:jQuery.tmpl 使用方式很简单,看一下它的说明就行了.给定一个模板,通过给它添加数据就能生成渲染好的元素节点,然后就可以将它添加到页面中,主要使用方法如: //数据 var object = { url: "http://example.com", getName: fu