从今天起,我带大家装装逼,看看js的高级进阶,如果对js比较弱的我建议还是先对js的基础知识补补课。
一、认识typeof运算符和instanceof
1、typeof:这个算是你很友好的朋友吧
咱们在写条件判断中判断一个变量的类型的时候,这里说的是基本的类型,时常会用这个typeof这个一元运算符,例如:
if(typeof num ==='undefined'){
//do something .........
}
我给大家把typeof返回的值一一罗列出来:
console.log(typeof a);//undefined
console.log(typeof'a');//string
console.log(typeof10);//number
console.log(typeoftrue);//boolean
//以下返回的是一个对象类型
console.log(typeoffunction(){});//function
console.log(typeof[1,2,'3']);//object
console.log(typeof{name:'zhangjl'});//object
console.log(typeofnull);//object
但是大家用的时候需要注意这样几个问题:
(1)、typeof返回的类型都是字符串,切记是字符串,很多同学可能不加引号。
(2)、只能判断值类型。
(3)、typeof需要判断的参数可以加括号或者不加(typeof (a)或者typeof a),在实际开发中可以选择不加括号。
既然typeof是如此的强大,那它怎么判断是一个引用类型呢?这个它就比较弱爆了,因为检查引用类型的时候不管是数组(关于数组他在ES5中定义了一个 类似于语法糖的新函数,那就是isArray(),返回的数据类型是Boolean类型)还是函数,还是非值类型的,都返回object。那么我们要判断一个引用类型那就需要下面的instanceof。
2、instanceof
当你判断一个变量是不是某个对象的实例的引用,这个时候它就配上用场了。例如:
console.log(user instanceof User)
有人会问,函数typeof返回的是function,怎么就变成了对象?这个在下面会做很系统的解释。
为了解决疑问,首先看一个例子:
var a =function(){
//do something .......
}
a instanceof Object //true
functionPerson(){
//do something .......
}
Person instanceof Object//true
从这里看出,函数确实属于对象。
结论:值类型的就用typeof判断,引用类型的就用instanceof判断。
二、对象与函数
1、对象是属性的集合
关于对象,我们开发人员应该是深有体会,在java中不是有一句“一切事物皆对象”吗? 那么在JavaScript中是不是也是这样呢?我们来梳理一下关于对象的相关认识和理解。
在java中new出来的才是对象,并且对象是一个有属性、有方法的完整体,但是在JavaScript中并不像java一样,除了new出来的是对象外,还有字面量的方式声明对象。更好玩的是你可以随时随地的在对象的构造函数外扩充属性和方法,字面量的在字面量对象的花括号外面扩充。这里我对创建对象的方式就不做说明了,我们主要看看对字面量创建JavaScript对象的扩充属性,其他的创建对象的方式中也是可以通过扩充属性的方式扩充对象的属性。
var obj ={
sum:10,
user:{
name:'zhangjl',
age:18,
dep:'软件事业部'
},
add:function(){
//do something.........
},
arry:['学历','姓名','专业']
}
obj.update =function(){
//do something .....
}
以上这种方式使用字面量方式创建对象,这里的obj对象拥有四个属性:sum、user、add、arry,甚至user对象内部又是一个对象。所以对象其实就是一个属性的集合。
2、对象和函数的关系
函数和对象之间的那些说不清楚的关系有点让人难以接受。为什么呢?咱们再看两个例子:
functionPerson(name,age){
this.name = name;
this.age = age;
}
var zhangjl =newPerson('zhangjl',18);
var wangwu =newPerson('wangwu',20);
function person(){
console.info('这个是一个普通的函数');
}
person();
创建对象的是构造函数,创建普通函数的是函数声明。说到函数声明我又得不得不说函数表达式,两个是有区别的。
关于函数声明和函数表达式的区别,直接上例子:
var a =function(){
console.info(name);
}()
function b(){
console.info(name)
}
var name='zhangjl';
a;//undefined
b();//zhangjl
结果令人很惊,因为在 JavaScript在拿到这个脚本的时候,js在解释器(js引擎)在解析脚本之前对函数声明和变量需要调整先后位置的,函数表达式可不会调整先后位置。
结论:函数是构造对象的其中一种方式,函数也可以是很普的函数。
相关推荐
构造函数、函数原型、函数实例三者之间的关系!详细的后续补上
所谓局部变量,指的是定义在函数内的变量,只能在函数内使用,它与函数外具有相同名称的其他变量没有任何关系。不同函数中,可以使用相同名字的局部变量,它们代表不同对象,互不干扰。此外,函数的形式参数也属于...
他们之间到底是什么关系.当然也不除外当初的我. 注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象. 我们先来看最简单的两个代码,也是最容易理解的. function fn(){} var obj = {} console.log(fn...
第二条:涉及构造和析构 通过实例化一个对象体现构造和析构 还要有函数重载 第三个:基类 派生类的关系 以及如何访问抽象类 纯虚函数 还应包含有对象成员(除了一般成员外) ----------------------------------------...
Qt的对象模型提供了一种Qt对象之间的父 子关系,当很多个对象都按一定次序建立起来这种父子关系的时候,就组织成了一颗树。当delete一个父对象的时候,Qt的对象模型机制保证了会自动的把 它的所有子对象,以及孙对象...
FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 ...
NULL 博文链接:https://wenzongliang.iteye.com/blog/2163551
本文实例讲述了JS面向对象...因此,面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程(procedural programming),更适合多人合作的大型软件项目
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...
本文实例讲述了JavaScript原型对象、构造函数和实例对象功能与用法。分享给大家供大家参考,具体如下: 大家都知道,javascript中其实并没有类的概念。但是,用构造函数跟原型对象却可以模拟类的实现。在这里,就先...
本书是《网络与信息安全前沿技术丛书》中,布尔函数的设计与分析分册,全面论述了布尔函数在密码算法设计中的基本问题和最新研究成果。 [1] 书中以通俗的语言和经典案例全面介绍了布尔函数在序列密码中的应用和研究...
c++中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。...因此,构成对象本身的只有数据,任何成员函数都不隶属于任何一个对象,非静态成员函数与对象的关系就是绑定,绑定的中介就是thi
python学习笔记,包含datetime模块-SQL数据库-对象关系映射-函数进阶
函数对象和其它内部对象的关系 – 对于Function, Object, Array, Date, RegExp, Math, Error等内部对象 可使用new操作来返回一个对象实例 三、类 1. 实现 2. 公有成员,私有成员,静态成员 3. 类的继承
华为 C++ 培训资料 经典 ...word讲解C++语言中级教材讲授C++语言的运用技术,包括:类、对象之间的关系、对象的存储与布局、运算符重载、智能指针、仿函数、泛型编程,C++模式设计基本思想。下载看吧
5.3.3 使用全局和局部函数分配和释放内存、改变内存块属性 137 5.4 虚拟内存管理 138 5.4.1 虚拟地址空间与内存分页 139 5.4.2 分配和释放可读可写的虚拟内存页面 139 5.4.3 修改内存页面状态和保护属性、...
而为了找到某一变量或函数的定义,您不得不在错综复杂的对象继承关系中刨根溯源、 上下求索。有了PB小助手,这些问题都将迎刃而解。它能帮您在一大堆对象或脚本中迅速找到您想要的,快人一步,胜人一筹!
10 ABS 这个函数是用来计算一个数的绝对值,与正负数符号没有关系。 11 ACCRINT 返回定期付息有价证券的应计利息。 12 ACOS 返回数字的反余弦值。反余弦值是角度,它的余弦值为数字。返回的角度值以...
面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 在ASP动态网页中,对象是一个抽象的...
5.3.3 使用全局和局部函数分配和释放内存、改变内存块属性 137 5.4 虚拟内存管理 138 5.4.1 虚拟地址空间与内存分页 139 5.4.2 分配和释放可读可写的虚拟内存页面 139 5.4.3 修改内存页面状态和保护属性、...