作者|Jeskson源|符号、数据类型、内置函数等。语法:JavaScript中的变量、函数名和运算符是区分大小写的,所以变量名Da和变量名da是两个不同的变量。标识符:什么是标识符?它指的是函数的变量名、函数名、属性名和参数名。标识符规则:1:第一个字符必须是字母、下划线或美元符号2:后面的字符可以是字母、下划线或数字。在JavaScript中,标识符是驼峰式的,首字母小写,后面每个单词的首字母大写。Annotation://单行注解/**多行注解**/严格模式:"usestrict";ECMAScript5引入了严格模式的概念,它为JavaScript定义了不同的解析和执行模型。这段代码表明是pragma,严格模式也可以在函数中实现:functiondaDa(){"usestrict";//functionbody}关键字和ECMAScript保留字的所有关键字:break,else,new,var,case,finally,return,void,catch,for,switch,while,continue,function,this,with,default,if,throw,delete,in,try,do,instanceof,typeof全部由ECMA第三版定义保留字:abstract,enum,int,short,boolean,export,interface,static,byte,extends,long,super,char,final,native,synchronized,class,float,package,throws,const,goto,private,transient,debugger,implements,protected,volatile,double,import,publicJavascript保留关键字不能用作变量、标签或函数名称。一些保留关键字用于Javascript的未来扩展。JavaScript保留关键字:abstract,arguments,boolean,break,bytecase,catch,char,class,constcontinue,debugger,default,delete,dodouble,else,enum,eval,export,extends,false,final,finally,float,for,function,goto,if,implementsimport,in,instanceof,int,interfacelet,long,native,new,nullpackage,private,protected,public,returnsshort,static,super,switch,synchronizedthis,throw,throws,transient,truetry,typeof,var,void,volatilewhile,with,yieldJavaScriptobject,propertyandmethodArray,Date,eval,function,hasOwnPropertyInfinity,isFinite,isNaN,isPrototypeOf,lengthMath,NaN,name,Number,Objectprototype,String,toString,undefined,valueOf变量:A变量是用于保存值的占位符。定义变量的关键字是varvardada;关键字、标识符和变量可以包含任何值。如果未初始化,该变量将持有一个特殊值undefined。vardada="达达";在定义变量时,您可以初始化变量并为其赋值。初始化过程就是一个简单的赋值过程,所以可以在修改值的同时修改值类型。vardada="dada";dada=12;这种行为是可能的,但不推荐。示例:functiondada(){varmsg="hellodada";//局部变量}dada();控制台日志(消息);此函数中的变量使用var定义msg并将其分配给hellodada。当这个函数被调用时,它会创建varmsg="hellodada",创建一个变量并赋值。记住:局部变量的定义只在其范围内有效,不在范围内时,该变量将被销毁。那么如何解决这样的情况呢?有局部变量就有全局变量,即局部变量作用域和全局变量作用域创建一个全局变量作用域:functiondada(){msg='dada';//全局变量}dada();console.日志(消息);为什么是这样?看看我这里是不是没有加上var关键字运算符。此时msg是一个全局变量,在函数外的任何地方都可以调用。省略var运算符仍然是错误的。不建议这样做。如果给一个还没有声明的变量赋值,在严格模式下会报错,抛出ReferenceError错误。介绍一下,变量也可以用一条语句定义多个变量,如下:vardada="da",da2="da2",age=12;2数据类型:对象是一种复杂的数据类型:本质上是一组键值对的序列。typeof运算符typeof运算符用于判断变量的数据类型typeofnull"object"//object的值是一个对象还是nullundefinedtypeundefined类型是一个值,是undefined。如果一个变量在没有初始化的情况下使用var声明,则该变量的值是未定义的。该变量被显式地初始化为未定义的值,并且比较两者是否相等。可以看出,da变量在没有初始化的时候默认是undefined。输出一个已声明但未初始化的变量,值为undefined,未声明的变量会报错。Null类型的空值表示一个指向空对象的指针,所以:varda=null;console.log(da);VM1174:2nullundefinedconsole.log(typeofda);VM1243:1objectundefinedif(dashu!=null){//null一个空指针对象}如果一个变量被预先判断为一个存储对象,你可以直接检查空值并打印它,你会发现:因为未定义的值是从空值派生的。如何区分空值和未定义值?undefined值,当一个变量还没有被初始化时,默认为undefined值,不需要显式设置为undefined值,但是,对于null来说,null值是一个指向空对象的指针,如果有意变量保存的是一个对象,但是在真正保存对象之前,可以先让变量保存空值。布尔类型:布尔类型有两个字面值,一个为真,一个为假。将各种类型转换为布尔值,调用Boolean()函数:String任何非空字符串为真""空字符串为falseNumber任何非零数值为true0且NaN为falseObject任何对象为truenull为falseconsole.log(Boolean(undefined));VM2052:1falseNumber类型:八进制字面值的第一位必须是0,后面是0到7,严格模式下八进制无效,十六进制的前两位必须是0x,后面是0到9,A到F。所有八进制和十六进制值在运算过程中都转换为十进制值。if(0.1+0.2==0.3){console.log("da");}undefinedif(0.3==0.3){console.log("da");}VM2148:2daundefinedif((0.1+0.2)==0.3){console.log("da");}undefined注意不要使用浮点数值计算,会出现舍入误差,有的不会。取值范围:Number.MIN_VALUE5e-324Number.MAX_VALUE1.7976931348623157e+308超出部分,自动转为Infinity值正无穷Infinity,负无穷-Infinity,它们不能参与计算,如何判断其范围内的值,使用isFinite()功能。Number.MIN_VALUE5e-324Number.MAX_VALUE1.7976931348623157e+308isFinite(1);trueisFinite(1.7976931348623157e+309);falseNaN不是数字,任何与NaN的运算返回NaN,NaN不等于任何值,包括它本身,返回false。常用函数判断是否为值,isNaN()函数用于判断参数是否“不是值”。数值转换:Number()函数用于将任何数据类型转换为数值。parseInt()和parseFloat()函数将字符串转换为数字。字符字面量、转义字符:\nnewline\ttab\bbackspace\r回车\\斜杠\'单引号\"双引号toString()函数转换为字符串,通过指定基数da.toString的值来改变输出();toString()不包含null和undefinedString()函数可以将任何类型的值转换成字符串,包括null和undefined3Object类型vardada=newObject;Object的每个实例中的方法和属性:构造函数,其中保留了函数用于创建当前对象,constructor构造函数为Object().hasOwnProperty(propertyName),用于检查给定属性是否存在于当前对象实例摘要中。da.hasOwnProperty("name")isPrototypeOf(object),用于检查传入的对象是否为当前对象的原型toLocaleString(),返回对象的字符串表示,对应执行链接的区域toString(),返回对象的字符串表示。valueOf(),返回对象的字符串、数字或布尔表示形式。运算符:按位运算符将其操作数(operands)视为32位位序列(由0和1组成),而不是十进制、十六进制或八进制值。例如,十进制数9在二进制中是1001。按位运算符对数字的二进制形式进行运算,但返回值仍然是标准的JavaScript值。AND(&),NOT(~),OR(|),EXCLUSIVEOR(^)<<(shiftleft)9(base10):000000000000000000000000000001001(base2)--------------------------------9<<2(基数10):000000000000000000000000000100100(基数2)=36(基数10)>>(有符号右移)9(基数10):00000000000000000000000000001001(base2)----------------------------------9>>2(base10):000000000000000000000000000000010(基数2)=2(基数10)-9(基数10):1111111111111111111111111110111(基数2)-----------------------------------9>>2(base10):111111111111111111111111111101(base2)=-3(base10)面试题:乘法,如果一个运算符为NaN,则结果为NaN;如果是Infinity和0相乘,结果是NaN;如果Infinity乘以非零值,则结果为Infinity或-Infinity,具体取决于带符号操作数的符号,Infinity与Infinity相乘的结果为Infinity。加法,Infinity加Infinity,结果是Infinity;如果-Infinity加上-Infinity,结果是-Infinity;Infinity加-Infinity结果为NaN;+0加+0是+0;-0加上-0是-0;+0加-0,结果为+0。减法,Infinity减去Infinity的结果是NaN,-Infinity减去-Infinity的结果是NaN,Infinity减去-Infinity的结果是Infinity,-Infinity减去Infinity的结果是-Infinity。三元运算符:varda=="da"=="da"?“1”:“2”;流程控制语句:if(){}elseif(){}else{}do{}while();while(){}for(vari=0;i
