js基础中容易被遗忘的细节

mac2026-05-10  2

    学习js基础常常容易忽略的细节,这些细节在面试中遇到往往是致命的。对于应届生来,最大的挑战就是基础不牢,很多技术一旦用起来就会出现很多疑惑     javascript的概念:         JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script language),         指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序         (比如浏览器)的“脚本”。              浏览执行Js代码         浏览器内核分成两部分:             渲染引擎:                 解析HTML与CSS,比如chrome浏览器的blink,老版本的webkit             js引擎:                 浏览器本身不会执行js代码,而是通过内置javascript引擎(解释器)来js代码                 js引擎会逐行解释执行         由于js引擎越来越独立,内核就倾向于只指渲染引擎,负责请求网络页面资源加以解析排版并呈现给用户              学习javascript三步走         ECMAScript:             javascript的基本语法,别名javascript或Jscript(Javascript的基础语法与核心知识)         DOM:             页面文档对象类型         BOM:             浏览器对象模型,通过BOM可以操作浏览器窗口,如弹出框、控制浏览器的页面跳转,获取分辨率等                  js代码书写的位置         行内:             <button οnclick="meythods()"></button>         内嵌:             <script>js代码</script>         外部引用:             <script src="外部js文件的url"></script>                  js注释:         多行注释:/* 注释内容 */         单行注释://注释内容              数据类型:         JavaScript 的数据类型共有六种。(ES6 又新增了第七种 Symbol 类型的值)             数值(number):                 整数和小数(比如1和3.14)                 Number.MAX_VALUE最大值    Infinity无穷大,大于任何数据                 Number.MIN_VALUE最小值    -Infinity无穷小,小于任何数据             字符串(string):                 文本(比如Hello World),'字符串(推荐使用单引号)',属性length,字符串长度。             布尔值(boolean):                 表示真伪的两个特殊值,即true(真)和false(假);默认为false                 常考细节注意:                     boolean类型的值参与加法运算时会先将true转换为1,false转换为0,在进行加法值运算                     var flag1=true;                     var flag2=false;                     console.log(flag1+1);  //true转换为数值1,输出2                     console.log(flag2+1);  //false转换为0,输出1                                          console.log(1||2);    //输出1                     console.log(1&&2);    //输出2                                          console.log(([])?true:false); //相当于(true)?true:false                     console.log([]==false?true:false); //相当于0==0?true:false                     console.log(({}==false)?true:false); //相当于(NaN==0)?true:false;                     注意:                     当比较运算涉及类型转换时 (i.e., non–strict comparison), JavaScript会按以下规则对字符串,数字,布尔或对象类型的操作数进行操作:                         1.当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。 首先, 一个数学上的值会从数字                     字面量中衍生出来,然后这个值将被转为一个最接近的Number类型的值。                         2.如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。                         3.如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原                     始值(一个字符串或数字类型的值)。如果尝试转换失败,会产生一个运行时错误。                         4.注意:当且仅当与原始值比较时,对象会被转换为原始值。当两个操作数均为对象时,它们作为对象进行比较,仅当它们引用相同对象时返回true。                         5.如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原                     始值(一个字符串或数字类型的值)。所以[].valueOf().toString()为""                                  undefined:                 表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值                 例:                     var a=undefined;                     console.log(a+"pink");// 输出undefinedpink字符串拼接                 注意:                     undefined与数字相加,最后结果为NaN

                    console.log(undefined+1);  //输出NaN             null:                 表示空值,即此处的值为空。                 例:                     var space=null;                     console.log(space+"pink"); //输出nullpink字符串拼接                     console.log(space+1);//输出1                 注意:null与任何数字相加结果都为原相加的数字                     undefined==null        =>输出true                     undefined===null    =>输出false             对象(object):各种值组成的集合。                 狭义的对象(object)                 数组(array)                 函数(function)                      typeof类型判断         typeof 1;                "number"         typeof "";                "string"         typeof true;            "boolean"         typeof undefined;        "undefined"         typeof null;            "object"         typeof [];                "object"         typeof {};              "object"              数据类型转换         数字类型转字符串类型的三种方法:             1.变量.toString();             2.var num=String(变量);             3.变量+"字符串";                  字符串类型转数字类型的三种方法:             1.转为整数:                 parseInt(字符串变量);字符串变量内容不能以字母开头,否则输出NaN                 以数字开头,则会连续读到小数点前一位非字母字符,转换为整数                 例:                     var num=parseInt("123.2356fgdgf");                     console.log(num);  //输出123                     var num=parseInt("dsd123456");                     console.log(num); //输出NaN               转为小数                 parseFloat(字符串变量);字符串变量内容不能以字母开头,否则输出NaN                 例:                     var num=parseInt("123.2356fgdgf");                     console.log(num);  //输出123.2356                     var num=parseInt("dsd123456");                     console.log(num); //输出NaN                     var num=parseInt("123m.456");                     console.log(num); //输出123             2.利用Number(字符串变量)                 例:                     var num=Number("123gf");                     console.log(num); //输出123                     var num=Number("ds123");                     console.log(num); //             3.利用运算符(-/*%)隐式转换                 例:                     "dfds123"-5        NaN                     "1234fd"-5        NaN                     "123"-5            118                  其它数据类型转换为布尔类型             代表空、否定的值都会转换为false,如:''、0、NaN、null、undefined,其余的都转换为true             例:                 Boolean('');         //false                 Boolean(0);              //false                 Boolean(NaN);        //false                 Boolean(null);        //false                 Boolean(undefined);    //false                 Boolean([]);        //false                 Boolean({});        //false                      运算符         算术运算符         不能直接判断两是否相等         例:             0.1+0.2==0.3   //false             0.07*100==7;   //false         比较运算符:             === 严格相等,要求两侧的变量数据类型和值都要完全一致             ==  两变量值相同即可,对象比较内存地址             例:                 18==="18"  //false   比较值与类型是否相同                 18=="18"   //true     比较值是否相同                  逻辑运算符             逻辑与短路运算                 例:                     console.log(1&&2);  //输出2                     console.log(1&&0);  //输出0                     console.log(0&&1);  //输出0                     如果表达式1为真,则返回表达式2,如果表达式1为假,则返回表达式1             逻辑或短路运算                 例:                     console.log(1||2);  //输出1                     console.log(1||0);  //输出1                     console.log(0||1);  //输出1                     console.log(0||0);  //输出0         运算符的优先级:             小括号()>一元运算符(++、--、!)>算术运算符(+-*/%)>比较运算符(==、===、!=、!==、>、<、>=、<=)>逻辑运算符(&&、||)>赋值运算符(=)                  条件分支语句:         判断字符串是否为空的条件:             str=="" || str.length==0          三元表达式(常用于替换if-else语句)         条件表达式?表达式1:表达式2          switch语句与if-else语句的应用场景         1.有范围判断条件优先用if-else语句           有确定值,优先用switch,效率高          2.分支少,用if-else语句            分支多,用switch语句             

最新回复(0)