专栏首页互联网杂技JS编程小常识很有用

JS编程小常识很有用

2.JS中的真真假假 空,null,undefined,false,0,””,'',NaN都为假,其他都为真 3.函数,类,对象,构造器有什么区别? 答:在js中函数,类,对象,构造器可以说是没有任何区别的,我们可以说函数既为对象,对象既为类,类既为构造器。但一般情况下,我们称对象为那个类的实例,这是为了减少混乱。

代码如下:

function Person(){ } var person = new Person(); //Person我们可以称为函数,类,对象,构造器(不带参数) //person称为对象的引用

4.懂this关键字,你懂JS五分之一. this永远指向调用该方法(函数)的那个对象.(必背) 首先要知道this是什么? this就是js中的一个对象。是一个对象,不是一个函数,此是的对象你可以看作是一个对象的引用,引用谁?引用调用方法的那个对象. this这个对象存在哪里?存在JS代码中,一般存在于函数之中。如果你把this放到<script>标签中,你可以试下window==this,打印什么?为什么? 剖析this关键字

代码如下:

function ready(){ alert(this==window); } ready();

此时打什么?true,为什么?

代码如下:

function Person(){ this.name='张三'; alert(this==window); } new Person();

此时打印什么?false,为什么? 把代码加长点.加一个var perso= var person = new Person(); 全世界的人都知道person引用了new Person产生的那个对象。new Person创建的是一个JS实例对象,我们就可以绑定属性和方法. 看下面这段代码

代码如下:

fn=function(){ } fn.ready=function(){ alert(this== fn); }

当调用fn.ready()的时候打印什么?true ,为什么? 十分奇怪,this现在等于一个函数了..为什么? 5.JS中静态方法和属性将助你一臂之力. 什么是静态.顾名思意:就是不动了,JS中不动的方法是什么?就是不需要创建实例,直接可以通过类名调用方法,哪里都没有动。方法就调用了。不需要任何额外的代码。这只是片面之言。所谓静态:就是属于类的属于类本身的特征. Js中类既为对象,何不能直接绑定属性和方法。当然可以.

代码如下:

fn=function(){ } fn.name='张三'; fn.getName=function(){ return fn.name; }

这也行,但为什么还要new 的过程,全都这样绑定不就可以了吗?思考 6.prototype和constructor的在JS框架中的影响 prototype为原型,是一个对象。,。 constructor为构造器,是一个函数 到现在为止,你要分清楚,什么时候的对象为对象,什么时候的对象是一个函数.也难为JS解析器,能解析运行如此灵活的代码。 prototype可以说他是一个类的静态的属性,他指向这个对象的实例。换句话说prototype是一个对象。prototype指向的对象和我们new的对象有何区别?建立了一种等价桥梁关系,但不是同一个。当我们在函数prototype上绑定属性的时候,那么属性和值就绑定到了prototype对象上,并没有正真的绑定到那个对象上去。当需要访问那个对象上的这个属性的时候,JS解析器,首先会去从对象本身上去找这个属性,然后再到原型对象上找。

代码如下:

function Person(){ } var person = new Person(); person.name=”张三”; Person.prototype.name=”李四”; alert(person.name); delete person.name; alert(person.name);

constructor指向一个对象的构造器。(什么是构造器?自己去复习。),由此可以看出他是一个对象级别的属性。也就是要使用constructor这个属性,必须需要一个对象。 那么prototype是一个对象有没有constructor属性?当然有,既然constructor是指构造器,那有没有一个prototype属性?当然有,以此类推,下面这两段代码是正确的. constructor.prototype.constructor.prototype.constructor…… prototype.constructor.prototype.constructor.prototype…… 其实我也不知道到底可以连多长?感兴趣可以试一下。顺便告诉你用递归算法。 在众多的JS代码中,当我们已知一个对象,要求他的构造器,或者已知一个构造器,求他的对象。应入门了。 7.==和===将判断进行到底. ==和===神像形不象.不要去考虑,一眼就看出是做断判是否相等。 有木有区别? ==判断变量是否相等。 ===判断变量的值相等。 以此类推:====用来干嘛的??用来报错的.你懂的.这里只想告诉你,只有==和=== JS中变量是弱类型的,都懂。

代码如

var a=3; var b=”3”; alert(a==b); JS中变量的值是强类型的。你懂的. var a =3; var b =”3”; alert(a===b);

都是var 类型的变量,但他们的值不一样,一个是整形,一个是字符串型. var类型和var类型相比,当然是true,整形和字符串型比,当然是false. ==用来比较他们值是否一样。不会是计较值的类型,只要他们的变量是var类型就可以了。当然是这废话,难不成,你不还能声明第二种变量类型的变量?. ===用来比较,会去判断他们的值是否为同一类型。如果不是,没有的比较。JS中变量的值是强类型的,有整形,字符串,数字,布尔等. 8.typeof和instanceof完成了判断未成的使命 typeof用来判断基本数据类型 instanceof 用来判断对象类型是否为某一个类型号 9.5种继承让你如虎添翼. i.对象冒充 ii.apply iii.call iv.prototype v.for循环方式 用法:永远只须记住,JS中的继承只是属性和方法的拷贝. 10.DOM模型结构改变你的思想 DOM是一种思想,一种将数据以树状结构数据的思想。学习DOM只需要掌握任何一个节点都有一个父节点和0到多个子节点.任何一个节点都有一个页面上的标签表现形式和一个内存对应着一个标签对象.页面只是展示数据的地方,内存中才是DOM对象数据保存地方。任何一个DOM对象只能有一个父节点对象。父子关系可以随时改变。 必须: 获取对象:查 对象操作:增,修,删 内容操作:innerHTML,innerText等 事件操作:mouse,key 样式操作:id,tag,class 属性操作:attribute 11.回调函数减少编写代码 什么是回调函数? 在JS中函数名是用来标识一个函数的。既我们可以传递给某个函数一个函数名(函数名柄),然后由那个函数来自动调用我们的函数完成相关的处理。 调用者与被调用者分开,我们不需要关心调用者,和被调用者。回调可用于通知机制,事件。 12.函数和arguments 函数名就是函数的句柄,指针,函数名是唯一的,这也成就了JS中没有函数重载。只有函数覆盖。函数名才是唯一标识函数的。 永远需牢访,JS中的函数调用就是在函数名后面加对括号() 函数调用参数可有可无,无论什么情况下,参数都会保存在函数体中的arguments对象中,你可以直接使用他,他是一个对象,参数是以数组形式存放。 13.闭包(匿名函数)为开发开辟了捷径 闭包是函数内调用函数外的参数,一般也可称为匿名函数,但两者有所不同。 闭包的价值在于可以作为函数对象或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回. 匿名函数减少了变量名称的冲突,为没有权限作用域的JS提供了权限作用域。当我们需要提供一个接口,但又不想让这个接口对象为全局变量就需要用匿名函数: (function(){ 局部代码,外部永远无法访问,除非你提供一个入口 })();

本文分享自微信公众号 - 交互设计前端开发与后端程序设计(interaction_Designer),作者:json

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • box布局

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style>...

    前朝楚水
  • 今天由我亲自给大家总结

    javascript内置对象有哪些? reg正则,booer,math,string,arr,obj,number,date,function,window全...

    前朝楚水
  • javascript大法好,不用记

    数组的操作 ---- Array.prototype.toString ( ) 把数组转变为字符串,返回字符串,arr.toString(); ---- Arr...

    前朝楚水
  • 在什么情况下,Java比C++慢很多?

    垃圾回收器。这是一把“双刃剑”。如果你的程序遵循“大部分对象都在年青代中消亡”模型,垃圾回收器是非常有利的(很少的碎片,更好的缓存局部性)。但是,如果程序不遵循...

    哲洛不闹
  • 用django开发一个管理系统有多简单?不用写代码的妹子都会

    django是python中最流行的一个web框架,django为广大开发者提供了非常便捷的开发模式。高度封装ORM,不用写一句代码,只要定义了model就可以...

    小贝壳
  • 用鼠标编辑的多边形裁剪! gizmo 插件入门 ! Cocos Creator!

    在 使用 mesh 实现多边形裁剪图片!这篇文章中介绍了一种不用 mask 实现多边形裁剪的一种方法。

    白玉无冰
  • 入门机器学习(二)-------线性单元和梯度下降及其代码实现(代码实现)

    通过上一篇文章,我们学会了一个简单的感知器,了解了阶跃函数(更喜欢叫二分类,简单明了哈哈),还有训练感知器的感知器规则。在这里学习另一种感知器——线性...

    andrew_a
  • java对象和类

    现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。

    用户7657330
  • 广告小程序后端开发(9.获取个人中心:用户身份数据,用户发布的广告和店铺及图片)

    玩蛇的胖纸
  • 一个Makefile 文件实例模板

    1  在Linux下,一般使用GCC文件,比较头疼的问题,每次编写Makefile文件,比较麻烦,关键是经常忘记makefile语法;

    无限之生

扫码关注云+社区

领取腾讯云代金券