js基础
yufawu
输出倒逼输入!
展开
-
js基础--闭包
从技术的角度讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。定义大多数函数时的作用域链在调用函数时依然有效,但这并不影响闭包。当调用函数时闭包所指向的作用域链和定义函数时的作用域链不是同一个作用域链时,事情就变得非常微妙。当一个函数嵌套了另外一个函数,外部函数将嵌套的函数对象作为返回值返回的时候往往会发生这种事情。有很多强大的编程技术都利用到了这...原创 2018-12-26 22:48:13 · 1129 阅读 · 0 评论 -
函数的实参和形参、作为值的函数
函数的实参和形参JavaScript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查。实际上,JavaScript函数调用甚至不检查传入形参的个数。 可选形参 当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值。因此在调用函数时形参是否可选以及是否可以省略应当保持较好的适应性。为了做到这一点,应当给省略的参数...原创 2019-01-01 22:41:13 · 9434 阅读 · 0 评论 -
Web浏览器中的JavaScript
客户端JavaScriptWindow对象是所有客户端JavaScript特性和API的主要接入点。它表示Web浏览器的一个窗口或窗体,并且可以用标识符window来引用它。Window对象定义了一些属性,比如,指代Location对象的location属性,Location对象指定当前显示在窗口中的URL,并允许脚本往窗口里载入新的URL://设置location属性,从而跳转到新的We...原创 2019-01-10 22:46:40 · 5556 阅读 · 0 评论 -
JavaScript中的面向对象
一个例子:集合类 集合(set)是一种数据结构,用以表示非重复值的无序集合。集合的基础方法包括添加值、检测值是否在集合中,这种集合需要一种通用的实现,以保证操作效率。JavaScript的对象是属性名以及与之对应的值的基本集合。因此将对象只用做字符串的集合是大材小用。例子9-6用JavaScript实现了一个更加通用的Set类,它实现了从JavaScript值到唯一字符串的映射,然后将字符...原创 2019-01-06 00:13:57 · 10892 阅读 · 2 评论 -
子类的定义,与组合的比较
在面向对象编程中,类B可以继承自另外一个类A。我们将A称为父类(superclass),将B称为子类(subclass)。B的实例从A继承了所有的实例方法。类B可以定义自己的实例方法,有些方法可以重载类A中的同名方法,如果B的方法重载了A中的方法,B中的重载方法可能会调用A中的重载方法,这种做法称为“方法链”(method chaining)。同样,子类的构造函数B()有时需要调用父类的构造函数A...原创 2019-01-06 22:43:00 · 5289 阅读 · 0 评论 -
Window对象--计时器,定位与导航,窗口
计时器 setTimeout()和setInterval()可以用来注册在指定的时间之后单次或重复调用的函数。因为它们都是客户端JavaScript中重要的全局函数,所以定义为Window对象的方法,但作为通用函数,其实不会对窗口做什么事情。Window对象的setTimeout()方法用来实现一个函数在指定的毫秒数之后运行。setTimeout()返回一个值,这个值可以传递给c...原创 2019-01-12 10:01:29 · 2333 阅读 · 0 评论 -
js基础--算术运算,日期时间,正则表达式和全局对象
JavaScript中的算术运算 JavaScript程序是使用语言本身提供的算术运算符来进行数字运算的。这些运算符包括加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)和求余(求整除后的余数)运算符(%)。除了基本的运算符外,JavaScript还支持更加复杂的算术运算,这些复杂运算通过作为Math对象的属性定义的函数和常量来实现:Math.pow(2...原创 2019-01-02 23:15:14 · 8445 阅读 · 0 评论 -
类和模块--ECMAScript 5中的类
让属性不可枚举 例9-6中的Set类使用了一个小技巧,将对象存储为“集合”的成员:它给添加至这个“集合”的任何对象定义了“对象id”属性。之后如果在for/in循环中对这个对象做遍历,这个新添加的属性也会遍历到。ECMAScript 5可以通过设置属性为“不可枚举”(nonenumerable)来让属性不会遍历到。例9-17展示了如何通过Object.defineProperty()来做到...原创 2019-01-07 23:16:09 · 1233 阅读 · 0 评论 -
正则表达式的模式匹配
JavaScript中的正则表达式用RegExp对象表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多的是通过一种特殊的直接量语法来创建。就像通过引号包裹字符的方式来定义字符串直接量一样,正则表达式直接量定义为包含在一对斜杠(/)之间的字符,例如:var pattern=/s$/;运行这段代码创建一个新的RegExp对象,并将它赋值给变量pattern。这...原创 2019-01-08 22:11:45 · 4127 阅读 · 0 评论 -
js基础(函数)--定义及四种调用方式
函数的定义 下面分别展示了函数语句和表达式两种方式的函数定义。注意,以表达式来定义函数只适用于它作为一个大的表达式的一部分,比如在赋值和调用过程中定义函数://输出o的每个属性的名称和值,返回undefinedfunction printprops(o){ for(var p in o) console.log(p+":"+o[p]+"\n");}...原创 2018-12-25 21:54:31 · 8101 阅读 · 0 评论 -
对象的属性,方法及序列化
对象的三个属性每一个对象都有与之相关的原型(prototype)、类(class)和可扩展性(extensible attribute)。下面将会展开讲述这些属性有什么作用,以及如何查询和设置它们。 原型属性 对象的原型属性是用来继承属性的,这个属性如此重要,以至于我们经常把“o的原型属性”直接叫做“o的原型”。原型属性是在实例对象创建之初就设置好的,通过对象直接量创建的对象使用...原创 2018-12-31 19:14:18 · 9163 阅读 · 0 评论 -
类和原型、构造函数及扩充
每个JavaScript对象都是一个属性集合,相互之间没有任何联系。在JavaScript中也可以定义对象的类,让每个对象都共享某些属性,这种“共享”的特性是非常有用的。类的成员或实例都包含一些属性,用以存放或定义它们的状态,其中有些属性定义了它们的行为(通常称为方法)。这些行为通常是由类定义的,而且为所有实例所共享。例如,假设有一个名为Complex的类用来表示复数,同时还定义了一些复数运算。...原创 2019-01-05 00:37:06 · 2670 阅读 · 2 评论 -
js基础--函数属性、方法和构造函数
我们看到在JavaScript程序中,函数是值。对函数执行typeof运算会返回字符串"function",但是函数是JavaScript中特殊的对象。因为函数也是对象,它们也可以拥有属性和方法,就像普通的对象可以拥有属性和方法一样。甚至可以用Function()构造函数来创建新的函数对象。 length属性 在函数体里,arguments.length表示传入函数的实参的个数。...原创 2018-12-27 23:30:42 · 3638 阅读 · 0 评论 -
js基础--数组方法
join() Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串。可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素。如果不指定分隔符,默认使用逗号。如以下代码所示:var a=[1,2,3];//创建一个包含三个元素的数组a.join();//=>"1,2,3"a.join("");//=>"1 2 3"a.join(""...原创 2018-12-22 21:57:46 · 1468 阅读 · 0 评论 -
js基础--数组(2)
1.创建数组使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可。例如:var empty=[];//没有元素的数组var primes=[2,3,5,7,11];//有5个数值的数组var misc=[1.1,true,"a",];//3个不同类型的元素和结尾的逗号数组直接量中的值不一定要是常量;它们可以是任意的表达式:var base=1024;va...原创 2018-12-23 20:00:37 · 1188 阅读 · 0 评论 -
js基础--数组(3)
1.数组类型我们到处都可以看见数组是具有特殊行为的对象。给定一个未知的对象,判定它是否为数组通常非常有用。在ECMAScript 5中,可以使用Array.isArray()函数来做这件事情:Array.isArray([])//=>trueArray.isArray({})//=>false但是,在ECMAScript 5以前,要区分数组和非数组对象却很困难。instanceo...原创 2018-12-24 21:09:28 · 911 阅读 · 0 评论 -
使用函数思想进行编程
JavaScript并非函数式编程语言,但在JavaScript中可以像操控对象一样操控函数,也就是说可以在JavaScript中应用函数式编程技术。ECMAScript 5中的数组方法(诸如map()和reduce())就可以非常适合用于函数式编程风格。 使用函数处理数组 假设有一个数组,数组元素都是数字,我们想要计算这些元素的平均值和标准差。若使用非函数式编程风格的话,代码会是这样:...原创 2018-12-28 23:25:06 · 6599 阅读 · 1 评论 -
js基础--类型转换与变量作用域
类型转换 转换和相等性 由于JavaScript可以做灵活的类型转换,因此其“==”相等运算符也随相等的含义灵活多变。例如,如下这些比较结果均是true:null==undefined//这两值被认为相等"0"==0//在比较之前字符串转换成数字0==false//在比较之前布尔值转换成数字"0"==false//在比较之前字符串和布尔值都转换成数字需要特别注...原创 2019-01-03 23:45:59 · 957 阅读 · 0 评论 -
js基础--对象
创建对象 对象直接量 创建对象最简单的方式就是在JavaScript代码中使用对象直接量。下面有一些例子:var empty={};//没有任何属性的对象var point={x:0,y:0};//两个属性var point2={x:point.x,y:point.y+1};//更复杂的值var book={ "main title":"JavaScript",/...原创 2018-12-29 23:48:16 · 1867 阅读 · 0 评论 -
对象--删除属性、检测属性、枚举属性
删除属性 delete运算符,可以删除对象的属性。它的操作数应当是一个属性访问表达式。delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性:delete book.author;//book不再有属性authordelete book["main title"];//book也不再有属性"main title"delete运算符只能删除自有属性,不能删除继承...原创 2018-12-30 23:44:15 · 7756 阅读 · 0 评论 -
正则表达式--RegExp对象
正则表达式是通过RegExp对象来表示的。除了RegExp()构造函数之外,RegExp对象还支持三个方法和一些属性。接下来会对RegExp模式匹配方法和属性展开讲述。RegExp()构造函数带有两个字符串参数,其中第二个参数是可选的,RegExp()用以创建新的RegExp对象。第一个参数包含正则表达式的主体部分,也就是正则表达式直接量中两条斜线之间的文本。需要注意的是,不论是字符串直接量还...原创 2019-01-09 22:56:45 · 8082 阅读 · 0 评论