1.if else 优化
const condition = condition1
let obj = {
'condition1' : () => { ... },
'condition2' : () => { ... },
'condition3' : () => { ... },
}
obj[condition]()
实例:
const condition = 2
let obj = {
'1' : () => { document.write(1) },
'2' : () => { document.write(2) },
'3' : () => { document.write(3) },
}
obj[condition]()
2,JavaScript for/in 语句循环遍历对象的属性:记住是遍历对象的属性
function myFunction(){
var x;
var txt="";
var person={fname:"Bill",lname:"Gates",age:56};
for (x in person){
txt=txt + person[x];
}
document.getElementById("demo").innerHTML=txt;
}
3,while和do while循环
两者达到的效果一样,只是如果条件最初就为false,dowhile会执行一次,而while则一次都不执行
4,定义了数组后对数组进行赋值,中间如有某些下标未被使用(即未被赋值),在遍历的时候,采用一般的 for 循环和 for...in 循环得到的结果不同。
for...in 循环会自动跳过那些没被赋值的元素,而 for 循环则不会,它会显示出 undefined。
5,break 的作用是跳出代码块, 所以 break 可以使用于循环和 switch 等
continue 的作用是进入下一个迭代, 所以 continue 只能用于循环的代码块。
代码块: 基本上是{}大括号之间
然后:
1. 默认标签的情况(除了默认标签情况,其他时候必须要有名标签,否则会有惊喜)
当 break 和 continue 同时用于循环时,没有加标签,此时默认标签为当前"循环"的代码块。
当 break 用于 switch 时,默认标签为当前的 switch 代码块:
有名标签的情况:
cars=["BMW","Volvo","Saab","Ford"];
list:
{
document.write(cars[0] + "");
document.write(cars[1] + "");
document.write(cars[2] + "");
break list;
document.write(cars[3] + "");
document.write(cars[4] + "");
document.write(cars[5] + "");
}
上述break list;会跳出list的代码块。如果将break换成continue会有惊喜,违反了明确中的第二点,因为list只是个普通代码块,而不是循环。
有了标签,可以使用break和continue在多层循环的时候控制外层循环。
outerloop:
for (var i = 0; i < 10; i++)
{
innerloop:
for (var j = 0; j < 10; j++)
{
if (j > 3)
{
break;
}
if (i == 2)
{
break innerloop;
}
if (i == 4)
{
break outerloop;
}
document.write("i=" + i + " j=" + j + "");
}
}
6,可以使用 typeof 操作符来检测变量的数据类型。
null是一个只有一个值的特殊类型。表示一个空对象引用。
在 JavaScript 中, undefined 是一个没有设置值的变量。
typeof 一个没有值的变量会返回 undefined。
7,null 和 undefined 的值相等,但类型不等:
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
8,constructor 属性返回所有 JavaScript 变量的构造函数
9,Operator + 可用于将变量转换为数字
var y = "John"; // y 是一个字符串
+ y; 返回NaN
var x = "5";
+x; 返回数字5
10,
正则表达式表单验证实例:
/*是否带有小数*/
function isDecimal(strValue ) {
var objRegExp= /^\d+\.\d+$/;
return objRegExp.test(strValue);
}
/*校验是否中文名称组成 */
function ischina(str) {
var reg=/^[\u4E00-\u9FA5]{2,4}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
/*校验是否全由8位数字组成 */
function isStudentNo(str) {
var reg=/^[0-9]{8}$/; /*定义验证表达式*/
return reg.test(str); /*进行验证*/
}
/*校验电话码格式 */
function isTelCode(str) {
var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
return reg.test(str);
}
/*校验邮件地址是否合法 */
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
11,变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。 所以变量先声明再使用和先使用再声明都可以。JavaScript 只有声明的变量会提升,初始化的不会
12,"use strict" 指令只允许出现在脚本或函数的开头
13,
比较运算符常见错误
在常规的比较中,数据类型是被忽略的,以下 if 条件语句返回 true:
var x = 10;
var y = "10";
if (x == y)
switch 语句会使用恒等计算符(===)进行比较:
var x = 10;
switch(x) {
case "10": alert("Hello");
}
不会执行弹窗。