您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 你可能不知道的JavaScript
你可能不知道的JavaScript党会建powerby《JavaScript启示录》《JavaScript语言精粹》你可能不知道的JavaScript•第一章、基本类型•第二章、对象和数组•第三章、函数、作用域和闭包•第四章、prototype和继承•第五章、高性能第一章、基本类型:原始值和复杂值1、9个原生的对象构造函数:NumberStringBooleanObjectFunctionArrayDateRegexpError2、5个原始值:数字,字符,布尔,null,undefined。原始值是作为不可细化的值,进行存储和操作的。他们是不可变的。3、复杂值除了原始值外的那些对象,是可变的键控(keyedcollections)集合.第一章、基本类型:原始值的引用和存储vara=1;varb=a;a=2;console.log(a,b)//2,1vara={aa:1};varb=a;a.aa=2console.log(a,b);原始值(String\Number\Boolean)在被用作对象时,就像对象。原始值使用toString方式,一旦调用或者返回该方法时,对象就会转变成原始值。第一章、基本类型:原始值的比较vara=1;varb=newNumber(1);varc=Number(1);//没有使用new因此获得的是原始值console.log(a==b);\\trueconsole.log(a===b);\\falseconsole.log(a===c);\\true==和===什么区别?当时同一个类型时,没有区别。如果不是同一个类型,会进行隐式强制类型转换。‘’==‘0’//false0==''//true0=='0'//true使用====NumberStringBoolean不加new直接执行,返回原始值第一章、基本类型:复杂值的引用和存储vara={aa:1};varfunc=function(num){num.aa=2console.log(a);//Object{aa:2}}func(a);vara={aa:1};varfunc=function(num){num={bb:1}console.log(a);}func(a);//Object{aa:1}赋值是靠等号,复杂值(对象)靠引用传递。如果单独赋值,相当于局部变量。第一章、基本类型:复杂值的引用和存储vara={aa:1};varfunc=function(num){num={bb:2}console.log(num);\\Object{bb:2}console.log(a);\\Object{aa:1}}func(a);vara=[1,2,3];varb=function(array){array.push(4);console.log(array);//[1,2,3,4]}b(a);console.log(a)//[1,2,3,4]赋值是靠等号,单独赋值相当于重新建了一个变量,跟原来引用的值没有关系了第一章、基本类型:假值和undefined关于boolean类型,记住假值,其他都是true就行了。假值:0,-0,null,undefined,false,NaN(非数字),空字符串。真值:其他任何值都是true,包括newBoolean(false)vara=newBoolean(false);if(a){console.log(a)}\\Boolean{[[PrimitiveValue]]:false}只允许js本身告诉你,这个值是undefined,有东西丢了。如果指定一个对象或者变量等不可以使用,应该使用null,vara=null;console.log(null==undefined)\\true第一章、基本类型:原始值的字面量访问属性时原始值/字面量被转换成对象console.log((1234).toString());console.log(1234['toString']());console.log(1234..toString());使用原始值/字面量编写更快速,字面量的形式更简洁实例执行valueOf函数就是字面量vara=newString(qqq);console.log(a.valueOf());console.log(typeofa.valueOf());第一章、基本类型原始值(值类型)1:基本类型是值类型,可以用typeof判断,2:占用空间固定保存在栈中3:保存与复制的是值本身复杂值(引用类型)1:使用new方法创建的对象,使用instanceof判断类型2:占用空间不固定,保存在堆中3:保存与复制的是指向对象的指针。js中一共5个原始值,6个typeof能判断的,9个原生的内置的构造函数。第一章、基本类型:typeoftypeof能判断:数字字符布尔objectfunctionundefined。注意null和数组,tyopeof都输出object。typeofNumbertypeofnewNumbervara=function(){varc=[];varb=Object.prototype.toString.apply(c);console.log(b);}a();//输出[objectArray]第一章、基本类型:typeofvartoString=Object.prototype.toString;varisArray=function(val){returntoString.call(val)==='[objectArray]'}varisFunction=function(val){returntoString.call(val)==='[objectFunction]'}第一章、基本类型:instanceofvarFoo=function(){}Foo.prototype={constructor:Foo}varFooInstance=newFoo;FooInstance.__proto__===Foo.prototype;//trueFooInstance.constructor===Foo;//truevarFoo=function(){};Foo.prototype={};varFooInstance={};FooInstance.__proto__=Foo.prototype;console.log(FooInstanceinstanceofFoo);//trueinstanceof判断不是依据constructor,而是依据原型链第一章、基本类型:instanceof实例的constructor属性指向的是构造函数实例通过构造函数的prototype来继承到属性包括constructor你可能不知道的JavaScript第二章对象和数组第二章:对象和数组:对象对象为王;对象是key-value的集合varmyObject=newObject();myObject['0']='f';myObject['1']='o';console.log(myObject);\\Object{0:f,1:o}varmyObject=newString(fo);console.log(myObject);\\String{0:f,1:o,length:2,[[PrimitiveValue]]:fo}第二章、对象和数组:对象字面量vara={aa:1,bb:2};•json的表示方法,属性名永远都是字符串类型,可以不用引号。•点表示方法,用于获取、更新、设置对象的属性都很方便,默认都是字符串,不需要引号。•括号表示法,属性名称在括号内,如果具体的属性名称需要用引号,如果不指定引号,则是变量。varmyObject={123:aa,class:bb};console.log(myObject.123)UncaughtSyntaxError:UnexpectedstringvarmyObject={123:aa,class:bb};console.log(myObject[123])//aavarmyObject={123:aa,class:bb};console.log(myObject[123]+,+myObject[class])//aabb第二章、对象和数组:对象字面量varstooge={first-name:dang,last-name:huijian};varstooge={first-name:dang,last-name:huijian};//错误标准26个字母,数字和布尔,在字面量中点表示法直接用于key,不用引号中括号表示法,如果不加引号代表的是变量第二章、对象和数组:hasOwnPropertyvaraaa={a:123,b:456}varBBB=function(){};BBB.prototype=aaa;BBB.prototype.c=789;varbbb=newBBB();bbb.foo=123;console.log(bbb);for(variinbbb){if(bbb.hasOwnProperty(i)){console.log(i);console.log(bbb[i]);}}如果是对象本地属性就是true第二章、对象和数组:forinvara=newString(1111);for(variina){console.log(i);console.log(a[i]);}第二章、对象和数组:forinforin循环仅能遍历可枚举的属性,即在遍历对象时可用的属性,典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。Object.prototype.bb=2;console.log(Object.prototype[bb]);//2vara={aa:1}for(variina){console.log(a[i]);//12}Object.prototype={bb:2};//破坏Object会被屏蔽掉console.log(Object.prototype.bb)//undefinedfor(varjinObject.prototype){console.log(Object.prototype[j])//什么都没有输出}vara=Object.prototype={bb:2};console.log(a.bb)第二章、对象和数组:对象的keyvara={};a[1]=a;a[1]=1;a['1']=aa;a[b]=2;a[{1:2}]=3;console.log(a);for(variina){console.log(i);console.log(typeofi);console.log(i.length);}Object{1:1,'1':aa,b:2,[objectObject]:3}1//会把第一个没有加“”的覆盖string1'1'string3//单引号算长度了bstring1[objectObject]//将那个对象,调用了toString的方法string15第二章、对象和数组:数组数组与对象一样,他的下标也是字符串。vara=[1,2,3]for(variina){console.log(typeofi)}//stringArray()仅仅是一种特殊类型的Object()。仅仅是他的实例,有额外功能的Object()实例。增加了一些属性和方法vara=newArray(1,2,3);varb=newArray(5);//一个参数就是长度console.log(a[0],a.length);console.log(b[0],b.length);13undefined5第二章、对象和数组:数组的lengthlength属性的值就是这个数组的最大整数属性加1varmyArray=[];myArray[1000]=1;console.log(myArray.length);//1001把length设置设大,不会分配更多空间;length设
本文标题:你可能不知道的JavaScript
链接地址:https://www.777doc.com/doc-3412964 .html