Javascript学习笔记一_第1页
免费预览已结束,剩余13页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、javascript学习笔记一一、数据类型 原始值(primitive value) 是存储在栈(stack)中的容易数据段,也就是说,他们的值挺直存储在变量的拜访的位置。(ecmascript有五种原始类型:undefined、null、boolean、number和string。) 引用值(reference value) 是存储在堆(heap)中的对象,也就是说存储的值是一个指针(point),指向存储对象的内存处。(对象,数组函数属于引用类型) 1)数字2)字符串数字转换字符串:var i = 138;/三种办法var s1 = i + ''var s2 = strin

2、g(i);var s3 = i.tostring();console.log(typeof(i); /numberconsole.log(typeof(s1); /stringconsole.log(typeof(s2); /stringconsole.log(typeof(s3); /string/二进制、八进制、十六进制var s4 = i.tostring(2);var s5 = i.tostring(8);var s6 = i.tostring(16);console.log(s4); /10001010console.log(s5); /212console.log(s6); /8a

3、字符串转换数字:var s = '22 years old'var i = s - 0; /注:给一个字符串加0则导致字符串衔接var j = number(i);var k = parseint(s); var l = parsefloat(s);console.log(typeof(s); /stringconsole.log(typeof(i); /numberconsole.log(typeof(j); /numberparseint和parsefloat可以从字符串开头处转换和返回任何数字,忽视或舍去非数字部分。parseint只截取整数,parsefloat截取整数

4、和浮点数。假如是以0x或0x开始,parseint将其说明为16进制数字。字符串链接用+号:var longstring = 'here is the strory, of a ' + 'man named bingdian.'3)布尔值4)nullnull是一个特别值,在下列场景应用法null: 用来初始化一个变量,这个变量可能赋值为一个对象 用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象 当函数的参数期望是对象时,用作参数传入 当函数的返回值期望是对象时,用作返回值传出 下面的场景不应该用法null: 不要用null来检测是否传入了某个参数

5、 不要用null来检测一个未初始化的变量 示例代码:/ 好的使用var person = null;/ 好的使用function getperson() if ( condition ) return new person('bingdian'); else return null; / 好的使用var person = getperson();if ( person != null ) dosomething();/ 不好的使用,用来和未初始化的变量比较var person;if ( person != null ) dosomething();/ 不好的使用 ,检测是否传入

6、了参数function dosomething(arg1, arg2, arg3, arg4) if ( arg4 != null ) dosomethingelse(); 理解null的最好的方式是将它当做是对象的占位符(placeholder)。5)undefinedundefined是一个特别值,简单和null搞混,undefined = null为true,这两个值的用途各不相同。没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。/不好的写法var person;console.log(person = undefined);/true尽管这段代码能正常工

7、作,但建议避开在代码中用法undefined。这个值经常和返回"undefined"的typeof运算符混淆。typeof不管理undefined的变量还是未声明的变量,运算结果都是"undefined":/foo未声明var person;console.log(typeof person); /"undefined"console.log(typeof foo); /"undefined"通过禁止用法特别值undefined,可以确保惟独一种状况下

8、typeof才会返回"undefined":当变量未声明时。6)函数7)对象8)数组9)date对象10)正则表达式11)error对象二、变量1)变量声明变量用关键字var来声明,如:var i, num, a, b, name ='bingdian'var关键字声明的变量是永远的,用delete运算符删除这些变量将会引发错误。x = 1;delete x;console.log(x); /x is not definedjavascript的变量类型是松散类型的,可以用来保存任何数据类型,可以在修转变量值的同时修转变量类型:var ans

9、wer = 10;x = 'the answer is ' + 10y = 10 + ' is the answer'console.log(x); / the answer is 10console.log(y); / 10 is the answervar a = '17' - 8; /9var b = '17' + 8; /178console.log(a);console.log(b);用法一个未声明的变量,会引发错误。2)变量作用域变量的作用域是程序中定义这个变量的区域。函数内声明的变量只在函数内部起作用(声明局部变量一

10、定要用法var关键字声明)。在函数内部,局部变量作用域优先级高于同名全局变量,例:var i = 99;var foo = function() var i = 10; console.log(i);foo(); /10 用法局部变量console.log(i); /99 用法全局变量声明局部变量一定要用法var关键字,用法var关键字声明变量时,变量会自动添加到距离最近的可用环境中。假如没有写var, 变量就会裸露在全局上下文中, 这样很可能会和现有变量矛盾. 另外, 假如没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到 document 或者 wi

11、ndow 中, 所以务必用var去声明变量。例:var a = 3;var foo = function() a = 10; b = 22; console.log(a); console.log(b);foo(); /10 22console.log(a); /10console.log(b); /22假如变量在未声明的状况下被初始化,该变量会自动添加到全局环境。看下面两个例子:function add(a ,b) var sum = a+b; return sum;var rs = add(2,3); console.log(rs); /5console.log(sum); /sum is

12、 not definedfunction add(a ,b) sum = a+b; return sum;var rs = add(2,3); console.log(rs); /5console.log(sum); /5 sum在被初始化赋值时没用var关键字,调用尽add()后,添加到全局变量的sum继续存在。javascript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境。每个函数在被调用时都会创建自己的执行环境,当函数执行完,当前执行gg'f环境被销毁。每个执行环境都有一个与之关联的作用域链。在执行代码时,javascript引擎会通过搜寻执行环境的作用域链来解

13、析变量和函数名这样的标识符。解析过程从作用域链的前端开头,向上逐级查询与给定名字匹配的标识符,一旦找到标识符,搜寻过程就停止,假如没找到该标识符,则沿作用域链继续向上搜寻,向来搜寻到全局对象,假如没有搜寻到,则认为该标识符未定义。标识符在作用域链中位置越深,查找和拜访它所需要时光越长,所以尽可能用法局部变量。全局环境只能拜访在全局环境中定义的的变量和函数,不能挺直拜访局部环境中的任何数据。3)没有块级作用域var a = 8;var foo = function() console.log(a); /undefined var a = 5; console.log(a); /5f();由于局部

14、变量在囫囵函数foo()内都有定义的,囫囵函数中躲藏了全局变量。虽然局部变量在囫囵函数体中有定义的,但在var语句之后,所以不会被初始化。所以最好在函数的顶部声明函数中全部用到的变量。4)未定义的变量和未赋值的变量没有赋值的变量值为undefined,用法未定义的变量会引起错误。var a;console.log(a); /undefinedconsole.log(b); /b is not defined5)垃圾收集(grabage collection)javascrip具有自动垃圾收集机制,javascript说明器可以检测到何时程序不再用法一个对象,就把它所占用的内存释放掉。三、运算符

15、1)算术运算符加法运算符(+)减法法运算符(-)乘法法运算符(*)除法法运算符(/)模运算符(%),取模运算符通常是整数,但它也适用于浮点数。加法运算符(+)递增运算符(+)i = 1;j = +i;console.log(i); /2console.log(j); /2i = 1;j = i+;console.log(i); /2console.log(j); /1递减运算符(–)i = 1;j = -i;console.log(i); /0console.log(j); /0i = 1;j = i-;console.log(i); /0console.log(j); /

16、12)相等运算符=相等运算符允许类型转换,检测两个运算符是否相等。 假如两个值具有相同的类型,检测它们的等同性,假如两个值彻低相同,则它们相等。 假如两个值具有不同的类型: 假如一个是null,一个是undefined,它们相等 假如一个是数字,一个是字符串,将字符串转换为数字比较 假如一个是true,将它转换为1比较。如是一个是false,将它转换为0比较。 假如一个值是对象,另一个是数字或字符串,将对象转换为原始类型值,再举行比较。可以用法对象的tostring或valueof转换。 javascript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而举行强制类型转换。&q

17、uot;" = "0" / false0 = "" / true0 = "0" / truefalse = "false" / falsefalse = "0" / truefalse = undefined / falsefalse = null / falsenull = undefined / true" /t/r/n" = 0 / true上面的展示了强类

18、型转换,这也是用法 = 被广泛认为是不好编程习惯的主要缘由, 因为它的复杂转换规章,会导致难以跟踪的问题。此外,强制类型转换也会带来性能消耗,比如一个字符串为了和一个数组举行比较,必需事先被强制转换为数字。3)=彻低等同 两个值类型不同,它们就不同 假如两个值都是数字,除非其中一个或两个者是nan,否则他们是等同的。 假如两个值都是字符串,而且同一位置上的字符彻低相同,那么它们就彻低等同。 两个值都是布尔值true或者都是false,那么它们等同。 两个值引用同一对象、数组或函数,它们彻低等同。假如引用不同对象,它们就不等同。 假如两个值者是null或者都是undefined,它们彻低相同。

19、= ; / falsenew string('foo') = 'foo' / falsenew number(10) = 10; / falsevar foo = ;foo = foo; / true 这里等于运算符比较的不是值是否相等,而是是否属于同一个身份;也就是说,惟独对象的同一个实例才被认为是相等的。4)关系运算符、>=、<、<=比较运算符只能在数字和字符串上举行,假如不是数字或字符串的运算数将被转换成数字或字符串。5)in运算符in左边的运算数是一字符串或者可以被转为为字符串,右边运算数是一个对象或数组,假如左边的值是右边对象的一个属

20、性名,则返回true。6)typeof运算符typeof 操作符(和 instanceof 一起)或许是 javascript 中最大的设计缺陷, 由于几乎不行能从它们那里得到想要的结果value class type-&quot;foo&quot; string stringnew string(&quot;foo&quot;) string object1.2 number numbernew number(1.2) number objecttrue boolean booleannew boolean(true) boolean objectnew da

21、te() date objectnew error() error object1,2,3 array objectnew array(1, 2, 3) array objectnew function(&quot;&quot;) function function/abc/g regexp object (function in nitro/v8)new regexp(&quot;meow&quot;) regexp object (function in nitro/v8) object objectnew object() object object上面代

22、码中,type 一列表示 typeof 操作符的运算结果。可以看到,这个值在大多数状况下都返回 object&quot;。class 一列表示对象的内部属性 class 的值。javascript 标准文档中定义: class 的值只可能是下面字符串中的一个: arguments, array, boolean, date, error, function, json, math, number, object, regexp, string.为了猎取对象的 class,我们需要用法定义在 ototype 上的办法 tostring。console.log(objec

23、totype.tostring.call(); / &quot;object array&quot;console.log(ototype.tostring.call(); / &quot;object object&quot;console.log(ototype.tostring.call(2); / &quot;object number&quot;为了检测一个对象的类型,剧烈推举用法 ototype.tostring 办法; 由于这是唯一一个可依靠的方式。正如上面表格所示,t

24、ypeof 的一些返回值在标准文档中并未定义, 因此不同的引擎实现可能不同。除非为了检测一个变量是否已经定义,我们应尽量避开用法 typeof 操作符。7)instanceof运算符instanceof左边的运算数是一个对象,右边运算数是一个对象类的名字,假如左边的对象是右边类的一个实例,则返回true。比较自定义对象:function foo() function bar() btotype = new foo();new bar() instanceof bar; / truenew bar() instanceof foo; / true/ 假如仅仅设置 btot

25、ype 为函数 foo 本身,而不是 foo 构造函数的一个实例btotype = foo;new bar() instanceof foo; / falseinstanceof 比较内置类型:new string('foo') instanceof string; / truenew string('foo') instanceof object; / true'foo' instanceof string; / false'foo' instanceof object; / falseinstanceof 运算符应当仅仅用来比较来自同一个 javascript 上下文的自定义对象。8)字符串运算符+9)规律运算符&amp;&amp; 、 | 、!10)条件运算符?:11)其它运算符对象创建运算符newdelete运算符数组对象存取运算符、.四、语句1)if2)else if3)switchswitch(n) case 1: /do something break; case 2: /do something break; case 3: /do somethi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论