switch条件需要和case匹配值和类型都要相同,另外switch的判断条件可以是String 、Number、Boolean、char、枚举、null、undefined
①var d = new Date().getDate(); ----->d是一个number类型,Sunday=0, Monday=1, Tuesday=2,······
12、创建对象:
1)使用构造函数创建对象并赋值如:
var obj = new Object();
obj.name = "张三";
obj["age"] = 21;
obj.sayHi = function(){};
2)使用字面量创建对象如:
var obj = {
name: "张三",
age: 21,
sayHi: function(){},
}
13、访问对象的属性和方法:
1)通过 对象名.属性名 来访问如:
console.log(obj.name); //张三
console.log(obj.age); //21
console.log(obj.sayHi); //这里并没有执行函数,若执行,在其后添加括号
2)通过 对象名["属性名"] 来访问,也可以自动添加属性名和属性值如:
console.log(obj["name"]); //张三
console.log(obj["age"]); //21
console.log(obj["sayHi"]); //这里并没有执行函数,若执行,在其后添加括号
obj["gender"] = "男";
console.log(obj["gender"]); //男
3)获取对象的属性和值如:
for(var key in obj){
//注:这里就不能使用 . 来访问了,若用点访问,则返回的结果可能是undefined或者是obj对象的key属性名对应的值。
console.log(key,"-----",obj[key]);
}
14、删除对象的属性名及它的值:
delete obj.age; 或者 delete obj["age"];
15、对象序列化和反序列化:
序列化JSON.stringify(obj):将js对象数据转换为字符串
console.log(JSON.stringify(obj));
反序列化JSON.parse(str): 将字符串转换技术对象数据
var str = JSON.stringify(obj);
console.log(JSON.parse(str));
16、每一个构造函数都有一个原型对象,实例可以调用对应的构造函数中的原型对象的属性和方法
console.log(Object.prototype); //{}
console.log(Object.prototype.constructor === Object); //true
var obj = {name: "张三"};
console.log(obj.toString()); //[object Object]
console.log(obj.toString === Object.prototype.toString); //true
console.log(obj.constructor); //[Function: object]
1)in 是判断是自有属性或者继承属性
console.log(‘name‘ in obj); //true
console.log(toString‘ in obj); //true
console.log(‘aaa‘ in obj); //false
2)hasOwnProperty() 判断是不是自有属性 如果重写了,也算是自有属性
console.log(obj.hasOwnProperty("name")); //true
console.log(obj.hasOwnProperty("aaa")); //false
3)propertyIsEnumerable() 判断是不是自有属性并且可枚举
console.log(obj.propertyIsEnumerable("name")); //true
console.log(obj.propertyIsEnumerable("toString ")); //false
4)isPrototypeOf()判断 Object.prototype是不是obj的原型对象
console.log(Object.prototype.isPrototypeOf(obj)); //true
17、函数:
1)函数声明:
----> function 函数名(){
函数体
return;
}
-----> var 函数名 = function (){
函数体
return;
}
它们的功能和Java的很相似
第二种是一个匿名函数(英文简称 IIFE)是一种立即执行的函数
匿名函数的使用如:
function(){
console.log("匿名函数");
}
执行这个函数的时候就在大括号后面添加()
2)函数声明提升和变量名声明提升如:
console.log(one); //undefined
function one(){
console.log("打印函数");
}
var one = 123;
console.log(one); //123
这种情况是变量声明在前,函数声明在后,函数声明再覆盖,最后变量再赋值
18、arguments 里存放实参列表,类数组对象,length属性代表存放实参个数,callee属性代表函数
function add(){
var total = 0;
for(var i = 0; i < arguments.length; i++){
total += arguments[i];
}
return total;
}
var result = add(1,2,3,4,5,6,7);
console.log(result); //28
function test(num){
console.log(arguments.callee); //[Function: test]
if(num == 1)
return 1;
else
return num*arguments.callee(num-1);
}
console.log(test(5)); //120
19、this指向当前函数的作用域( 指向的是函数赖以执行的环境对象)
function test(){
console.log(this); //返回 globa l对象
}
在nodeJS环境中返回的是global对象,
在浏览器环境中返回的是window对象
test();
var obj = {
name:‘zhangsan‘,
age: 21,
gender: ‘male‘,
sayHi: function(){
console.log(this); //就会返回{name:‘zhangsan‘, age:21, gender: ‘male‘, sayHi: [Function],}
}
}
obj.sayHi();