学习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语句
