当前位置: 首页 > 科技观察

面试开发常用JavaScript知识点总结

时间:2023-03-21 11:08:45 科技观察

No1.语法和类型1.声明和定义变量类型:var,定义变量;let,定义块域(作用域)局部变量;const,定义只读常量。变量格式:以字母开头,下划线“_”或$符号,区分大小写。变量赋值:声明但未赋值的变量在使用时是未定义的,直接使用未声明的变量会抛出异常。用于计算的未分配变量:结果为NaN。例如:varx,y=1;console.log(x+y);//结果为NaN,因为x没有赋值。2.Scope变量作用域:在ES6之前,没有块声明作用域,变量作用于功能块或全局。如下代码,输入x为5。if(true){varx=5;}console.log(x);//5ES6变量作用域:ES6支持块作用域,但变量需要用let声明。以下代码的输出抛出异常。f(true){lety=5;}console.log(y);//ReferenceError:yisnotdefined1234variablefloating:在方法或全局代码中,我们在life变量之前使用该变量并没有抛出异常,而是返回不明确的。这是因为javascript自动将变量声明浮动到函数或全局变量的顶部。比如下面的代码:/***全局变量浮动*/console.log(x===undefined);//logs"true"varx=3;/***方法变量浮动*/varmyvar="myvalue";//打印变量myvar的结果是:undefined(function(){console.log(myvar);//undefinedvarmyvar="localvalue";})();上面的代码等同于下面的代码:/***全局变量Float*/varx;console.log(x===undefined);//logs"true"x=3;/***方法变量float*/varmyvar="myvalue";(function(){varmyvar;console.log(myvar);//undefinedmyvar="localvalue";})();全局变量:在页面中,全局对象是window,所以我们可以通过window.variable来访问全局变量。例如:version="1.0.0";console.log(window.version);//输出1.0.0No2。数据结构及类型1.数据类型6种基本类型:Boolean(trueorfalse)、null(js大小写敏感,区别于Null、NULL)、undefined、Number、String、Symbol(唯一且不可变的标记)对象类型:目的。对象和函数:对象是值的容器,函数是应用程序的过程。2、数据转换函数:将字符串转换为数字,使用parseInt和parseFloat方法。parseInt:函数签名为parseInt(string,radix),radix是2到36之间的一个数,代表数基,比如十进制或者十六进制。返回结果为整数或NaN,例如以下输出结果均为15。parseInt("0xF",16);parseInt("F",16);parseInt("17",8);parseInt(021,8);parseInt("015",10);parseInt(15.99,10);arseInt("15,123",10);parseInt("FXX123",16);parseInt("1111",2);parseInt("15*3",10);parseInt("15e2",10);parseInt("15像素",10);parseFloat:函数签名为parseFloat(string),返回结果为数字或NaN。例如:parseFloat("3.14");//返回数字parseFloat("314e-2");//返回数字parseFloat("morenon-digitcharacters");//返回NaN3。数据类型text文本类型:Array、Boolean、Floating-point、integers、Object、RegExp、String。Array中多余的逗号:["Lion",,"Angel"],长度为3,[1]的值为undefiend。['home',,'school',],***省略一个逗号所以长度为3.[,'home',,'school']长度为4.['home',,'school',,]],长度4.integer整数:整数可以表示为十进制、八进制、十六进制、二进制。例如:0,117and-345//十进制015,0001and-0o77//八进制0x1123,0x00111and-0xF1A7//十六进制0b11,0b0011and-0b111234//二进制浮点数:[(+|-)][digits][.数字][(E|e)[(+|-)]数字]。例如:3.1415926,-.123456789,-3.1E+12(3100000000000),.1e-23(1e-24)对象:可以通过“.Attribute”或“[AttributeName]”获取对象的属性值.例如:varcar={manyCars:{a:"Saab","b":"Jeep"},7:"Mazda"};console.log(car.manyCars.b);//Jeepconsole.log(car[7]);//马自达对象属性:属性名可以是任意字符串或空字符串,无效名称可以用引号括起来。复杂的名字不能通过.获取,可以通过[]获取。例如:varunusualPropertyNames={"":"Anemptystring","!":"Bang!"}console.log(unusualPropertyNames."");//SyntaxError:Unexpectedstringconsole.log(unusualPropertyNames[""]);//Anemptystringconsole.log(unusualPropertyNames.!);//SyntaxError:Unexpectedtoken!console.log(unusualPropertyNames["!"]);//砰!转义字符:以下字符串输出包含双引号,因为使用了转义符号"\"".varquote="Heread\"TheCremationofSamMcGee\"byR.W.Service.";console.log(quote);//Output:HereadR.W.Service.1的“TheCremationofSamMcGee”。字符串换行方法:直接在字符串行末尾添加“\”,如下代码所示:varstr="thisstring\isbroken\acrossmultiple\lines."console.log(str);//thisstringisbrokenacrossmultiplelines.No3.控制流程和错误处理1.块表达式功能:块表达式一般用于控制流程,如if、for、while。以下代码中的{x++;}是块声明。while(x<10){x++;}ES6之前没有块作用域:在ES6之前,块中定义的变量实际上是包含在方法或者全局中的,变量的影响超出了块作用域的范围.比如下面的代码最终执行结果为2,因为block中声明的变量作用于方法。varx=1;{varx=2;}console.log(x);//outputs2ES6之后,有了块域作用域:在ES6中,我们可以把块域声明var改成let,让变量只作用域到块范围。2、通过逻辑判断判断为假的特殊值:false、undefined、null、0、NaN、""。Simpleboolean和objectBoolean类型:simpleboolean类型的false和true与objectBoolean类型的false和true是有区别的,两者并不相等。比如下面的例子:varb=newBool??ean(false);if(b)//返回trueif(b==true)//返回falseNo4.异常处理1.异常类型抛出异常语法:抛出异常可以是任何类型。如下。throw"Error2";//字符串类型throw42;//数字类型throwtrue;//布尔类型throw{toString:function(){return"I'manobject!";}};//对象类型自定义异常://创建anobjecttypeUserExceptionfunctionUserException(message){this.message=message;this.name="UserException";}//重写toString方法,抛出异常时可以直接获取有用的信息UserException.prototype.toString=function(){returnthis.name+':"'+this.message+'"';}//创建对象实体并抛出thrownewUserException("Valuetoohigh");2.语法关键字:使用try{}catch(e){}finally{}语法类似于C#语法。finally返回值:如果finally加了return语句,不管整个try.catch返回什么,返回值都是finallyreturn。如下:functionf(){try{console.log(0);throw"bogus";}catch(e){console.log(1);returntrue;//return语句被挂起,直到最终执行完毕console.log(2);//不会执行的代码}finally{console.log(3);returnfalse;//覆盖try.catch的返回console.log(4);//不会执行的代码}//"returnfalse"isexecutednowconsole.log(5);//notreachable}f();//输出0,1,3;returnfalsefinallyswallowexception:如果finally有return并且catch中有throw异常。throw异常不会被捕获,因为它已经被finallyreturn覆盖了。如下代码所示:functionf(){try{throw"bogus";}catch(e){console.log('caughtinner"bogus"');throwe;//throw语句被挂起,直到finally执行完毕}finally{returnfalse;//覆盖try.catch中的throw语句}//“returnfalse”已经执行}try{f();}catch(e){//这里不会执行,因为throwinthecatch已经finally中的return语句覆盖了console.log('caughtouter"bogus"');}//输出//caughtinner"bogus"系统错误对象:我们可以直接使用Error{name,message}对象,对于示例:throw(newError('Themessage'));