共计 3232 个字符,预计需要花费 9 分钟才能阅读完成。
1、<script> 标签放在 <body> 底部,先显示页面可加快加载速度。2、var 定义局部变量,省略则定义全局变量,但是不推荐。可一次定义多变量(,号分隔)var message = “h1”, found = false, age = 20;3、数据类型:5 种基本数据类型:undefined,Null,Boolean,Number,String; 1 种复杂数据类型:Object; 使用 typeof 可检测变量的数据类型 例:Alert(typeof(message) ) // “String”; typeof 为操作符不是函数,所以可以省略()typepf null // Object;4、Undefined : 定义但未赋初值。var message; alert(message); // undefined alert(age); // error5、NUll 类型:一个空对象指针 alert(null == undefiend)// true6、Boolean 类型. true 不一定等于 1,false 也不一定等于 0. 大小写敏感。可对任何变量使用转型函数 Boolean。转换规则:
if 语句自动转换:var message = “hello”; if(message) {// 转为 true alert ( “value id true”); }7、Number 类型:
* 浮点数值
var float Num3 = .1 // 有效,但不推荐
* e 表示指数幂
3.125 e7 ; // 等于 3125000:3.125 * 10 的 7 次幂
最高精度是 17 位小数,计算精度不如整数。
例:0.1 + 0.2 ≠ 0.3 而是 等于 0.3000000……4。
if (a+b == 0.3) {} // 永远不要用 float 做测试
* NaN:即非数值,是一个特殊的数值
任何数除以非数值都返回 NaN,因此不影响其他代码执行。NaN 的两个特点:
任何涉及到 NaN 的操作都返回 NaN,(如 NaN / 10)
NaN 与任何值都不相等,包括本身。alet(NaN == NaN); //falseisNaN();判断是否“不是数值”。
数值转换:Number(),parseInt(),parseFloat();
对于任何类型可用第一个,后两个用于字符串;Number()转换字符串复杂且不合理,处理整数用 parseInt();处理浮点数用 parserFloat();例:parseInt(“1234blue”);// 12348、String 类型
* 字符字面量
/n : 换行 /t 制表 /r 回车
* 特点
不可变,只能销毁重建。
* 转为字符串
tostring():null 和 undefined 没有此方法,要用 String()方法;简便转换方法:值与字符串相加(“”)。注意:0.9 – “0.4” = 0.5 // 隐式类型转换;1 +“2”= “12”;9、Object 类型 : 一组数据和功能的组合 Object 类型是所有它的实例的基础,所具有的任何属性和方法同样存在更具体的对象中。每个实例都具有以下属性和方法:
* constructor():构造函数,保存着用于创造当前对象的函数;
* hasOwnProperty(property) : 检查给定属性在当前对象实例中(不是在原型中)是否存在;
* isPropertyOf(object) : 对象是否是当前对象原型;
* toLocalString() : 返回对象的字符串表示,与地区对应;
* toString() : 返回对象的字符串表示;
* valueof() : 返回对象的字符串、数值、布尔值表示,通常与 tostring() 一样。
10、操作符 包括算数操作符(加号、减号等),位操作符,关系操作符和相等操作符。
* 一元操作符
++i : i = i + 1; // 先自加再赋值
* 一元加减
该操作符对非数值应用时,会像 Number() 转型函数一样对值进行转换。对对象先调用 valueof 和 tostring 方法。可用于基本算数运算,也可以用于转换数据类型。
* 位操作符
整数的补码为本身,负数的补码为取反加一;按位 非 (NOT) : ~ 表示,反码;按位 与 (AND) : & 表示,同为 1 得 1,其他为 0;按位 或 (OR) : | 表示,同为 0 得 0,其他为 1;按位 异或 (XOR) : ^ 表示,同为 0,异为 1;左移:<< 以 0 补位,32 位;有符号右移:>> 保留符号位 0:正 1:负;无符号右移 >>> 负数以绝对值二进制补码表示;
* 布尔操作符:非(NOT)与(AND)或(OR)
逻辑非(!):可用于任何值,无论类型都返回布尔值,先转为布尔值,再求反;逻辑与(&): 同真为真,其他为假;短路操作:第一个能决定结果,后边就不用求值,如第一个为 false,结果直接为 false;逻辑或(||):同假为假,其他为真有一个操作符不是布尔值,结果不一定返回布尔值;与逻辑与一样,短路运算;可用短路逻辑为变量赋值避免赋 null 和 undefined。如:var result =(A || B)// 当 A 不为 null,赋值 A,否则为 B;
* 乘性操作符
乘法:(*)除法:(/)求模:(%)// 余数
* 加性操作符
5 + 5 = 10 5 + “5” = “55” “str” + 5 + 5 = “str55” “str” + (5 + 5) = “str10”
* 减性操作符 : 先进行隐式类型转换(Number()): 注意转换规则对 number 类型友好优先
5 – “2” = 3 5 – true = 4 5 – “” = 5 NaN – 1 = NaN
* 关系操作符:> < >= <=
比较字符串时比较的事字符编码值,例:a 为 97,B 为 66“B”< “a” // true “23” < 3 // true
* 相等操作符:== != === !==
相等和不相等 —- 先转换再比较全等和不全等 —- 比较但不转换,比较数据类型
* 条件操作符(三目运算符)
A ? b : c // A 为真是值为 b,否则为 b
* 赋值操作符:=
= 右边的值赋给左边变量赋值复合操作符:*= /= %= += -= <<= >>= >>>=
* 逗号操作符
一条语句执行多个操作:var num1 = 1 , num2 = 2,num3= 3; 用于赋值时,总是返回表达式最后一个值:var num = (5,1,4,8,0) // 返回 011、语句
* if 语句:先用 Boolean 转换
推荐使用代码块:{}
* do – while 语句:后测试循环语句,循环内代码至少执行一次
let i = 0;do {i +=2} while
* while 语句 : 前测试循环语句,有可能不会被执行
var i = 0;while(i<10){i += 2;}
* for 语句:var 定义的变量会污染全局,之后尽量使用 let
* var count = 10;
for(var i = 0;i < count;i++){alert(i);}alert(i); //10
* for-in 语句:
一种精准的迭代语句,可用来枚举对象属性,例:for(property in expression) {} 返回的属性无序,因浏览器而异;
* label 语句
可在代码中加标签,以便将来使用;
* break 和 continue:
break 直接跳出循环,continue 跳到下一次循环;
* with 语句:
将代码的作用域设置到一个特定对象中。语法:with(expression){}:此语法会导致性能下降,不建议使用。
* switch 语句:
switch(expression){case value : statement break; default : statement}12、函数 function functionName(org1,org2…){statements}
* 调用:functionName();
可加 return 设置返回值;执行 return 后停止并立即退出,位于 return 后的代码永远不会执行。
* 理解参数
不介意传递的参数的种类和个数,因内部用数组来表示,函数体内可以用 arguments 对象来访问参数数组。命名参数只是提供便利,不是必须的,可在内部判断参数的长度完成重载。所有传递都是值的传递,没有值的自动赋予 undefined 值。
* 没有重载
重载:函数名相同,参数的数量和类型不同。es 中定义两个同名函数,后者会覆盖前者,通过检查传入参数的种类和数量可以模仿重载。