对象属性删除
var obj = {
name:'zhangsan',
age:12,
test: 123
};
var test = 'age';
// obj.age
// obj.[test]
//[]访问属性,内可放变量
console.log(obj[test]);//12
console.log(obj['test']);//123
console.log(obj);
//删除test属性
delete obj.test;
console.log(obj);
命名了一个test的变量并赋予了age的值,所以第一个打印的结果为12。
第二个打印的是obj中test的值为123,在[]中加‘’为属性名。
第三个打印obj变量中的值为
{ name: ‘zhangsan’, age: 12, test: 123 }
第四个打印出
{ name: ‘zhangsan’, age: 12 }
是因为delete删除了obj中test的属性。
对象属性遍历
var obj2 = {
username:'lisi',
password:'123',
gender:'',
age:'',
hobby:'',
info:'我是一个XXX的人',
sno:1001
}
//遍历对象,获取属性值,如果属性值为空,删除属性
console.log(obj2);
for(var key in obj2){
//key-属性名
// console.log(key,obj2[key])
if(!obj2[key]){
delete obj2[key];
}
}
console.log(obj2);
第一个打印出
{ username: ‘lisi’,
password: ‘123’,
gender: ‘’, age: ‘’,
hobby: ‘’,
info: ‘我是一个XXX的人’,
sno: 1001 }
是遍历对象中的属性
第二个打印出{ username: ‘lisi’, password: ‘123’, info: ‘我是一个XXX的人’, sno: 1001 }是因为删除了obj2中属性值为空的属性。
pS:注释掉的打印出来的是一个数组。
字符串的转化
var obj = {
name:'zhangsan',
age:12
}
console.log(obj);
console.log(obj.toString());
console.log(JSON.stringify(obj));
var jsonStr = '{"name":"zhangsan","age":12}';
console.log(JSON.parse(jsonStr));
第一个打印出如下结果是因为遍历obj中的属性。
{ name: ‘zhangsan’, age: 12 }
第二个打印出如下结果是因为toString将一个对象转化成字符串
[object Object]
第三个打印出如下结果是因为stringify把js字符串转化成JSON字符串,且JSON中字符串形式的都带引号
{“name”:“zhangsan”,“age”:12}
第四个打印出如下结果是因为parse将JSON字符串转化成JS字符串
{“name”:“zhangsan”,“age”:12}
JS函数
1累加
function add(){
//arguments代表所有实参所在的位置,类数组对象
console.log(arguments);
var arr = Array.from(arguments);
//类数组对象转成数组
// console.log(arr);
var total = 0;
for(var i=0;i<arr.length;i++){
total +=arr[i];
}
return total;//一定要给一个返回值
}
console.log( add(3,4));
//计算多个数的累加
console.log( add(3,4,7,9,78));
打印出的结果如图,arguments是一个类数组指出所有实参所在的位置,Array.form将arguments类数组转化为数组,之后定义函数total函数进行累加。
[Arguments] { ‘0’: 3, ‘1’: 4 }
[ 3, 4 ]
7
[Arguments] { ‘0’: 3, ‘1’:4, ‘2’: 7, ‘3’: 9, ‘4’: 78 }
[ 3, 4, 7, 9, 78 ]
101
2.全局变量,局部变量
var d=34
test(1,2);
function test(a,b){
// var a,b
a=3;
console.log(a,b); //3,2
var c=12
console.log(c);//函数内用var修饰的变量,只能在函数内访问,局部变量
d=78;
var d=56;//d=56不使用var修饰的就是全局变量
console.log(d,'-----');
}
// console.log(c);
console.log(d,'++++++');//34
第一个打印出a和b的值为“3,2”是因为a在函数内又被赋予了一个值而b不变。
第二个打印出“12”是因为在函数内定义了一个变量c且赋值为12,但如果在函数外部打印的话将会报错,用var修饰的变量是局部变量只能在函数内访问。
第三个打印出“56 -----”,是因为即使在函数内定义d为78,但是Var修饰的变量声明会提升,函数声明也会提升,函数声明会提升到最前方,然后是变量声明的提升。
第四个打印出“34 ++++++”是因为在函数外声明的变量是全局变量。
3.回调函数
var test = function(){
console.log(123);
}
useFun(test);
function useFun(fun){
var c = 3;
fun(c);
}
useFun(function(a){
console.log(a)
})
第一个打印出来为123,第二个打印出来为3
因为c作为回调函数做数据传递给a。
function start(){
return function(){
return{name:'zhangsan',
age:12,
sayName:function(){
console.log(this.name);
}
}
}
}
start()().sayName();//先赋值再运行
函数可作为参数传递,也可作为返回值。