JavaScript基本概念(二)
来源:互联网 发布:油气田开发工程 知乎 编辑:程序博客网 时间:2024/06/06 01:44
一、表达式
var arr = [] var p = {};
var f = function(){}
f() a.sort()
我们可以用花括号将多条语句括起来,这就是复合语句(语句块)。
分号前面可以没有任何内容
var
和function
都是声明语句,它们声明或定义变量或函数。function a(){}
3、条件语句switch(expression) { case "": case "": statement;break; .....}
注意:由于对每个case的匹配操作实际是“===”全等运算符比较,而不是“==”相等运算符比较,因此,表达式和case的匹配并不会做任何类型转换。比如字符串"10"不等于数值10.
(contidion) ? expr1 : expr2
while(expression) { statement }
do...while语句do { statement } while(expression);
for(initialize ; test ; increment) { statement }
initialize、test、increment三个表达式之间用分号隔开,分别负责初始化操作、循环条件判断和计数器变量的更新。
var o = { name: 'tg', age: 18};for(var v in o) { console.log(v + ': ' + o[v]);}
break
语句是强制退出循环,然后执行循环后面的语句。continue
语句是终止本次循环的执行并开始下一次循环的执行。
标签是由语句前的标识符和冒号组成。label语句定义的标签一般由break或continue语句引用。加标签的语句一般要与for等循环语句配合使用。
label : statement
return
语句时,函数终止执行。异常是指当发生了某种异常情况或错误时产生的一个信号。
with
语句用于临时扩展作用域链,也就是将代码的作用域设置到一个特定的对象中。
with(object){ statement }
将object添加到作用域链的头部,然后执行statement,最后把作用域链恢复到原生状态。
var o = { name: 'tg', age: 24};with(o){ console.log('name:' + name); // name:tg console.log('age:' + age); // age:24}
with里面的name相当于o.name。
(4)debugger语句
debugger语句用来产生一个断点(breakpoint),JavaScript代码的执行会停止在断点的位置。一般用来调试代码。
var o={ name:'a'}
var o = { go: function(x){ return x+1; }};o.go(2) // 3
如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。- 对象直接量: var o={};
- 关键字new: var o=new Object();
- Object.create()函数: var o=Object.create(null)
var o = { name : 'a'}o.name // "a"o['name'] //“a"
var o = { name : 'a', age : 12}for(var i in o){ console.log(o[i]}// "a"// 12
使用Object.keys方法,返回一个数组。
var o = { name : 'a', age : 12}Object.keys(o) //['name','age']
(3)删除属性
delete运算符可以删除对象的属性。(只能删除自有属性,不能删除继承属性。)
var o={ name : 'a'}delete o.name //trueo.name //undefined
(4)检测属性用于判断一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。
in运算符
in运算符左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性就返回true。
var o = { name : 'a'}'name' in o //true
var o = { name : 'a', age : 12, intro : [false,null,'']}s= JSON.stringify(o) // s {"name":"a","age":12,"intro":[false,null,""]}p=JSON.parse(s) // p是o的深拷贝
注意:JSON.stringify()只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。
构造函数也可以传入参数:
function Car(color){ this.color = color;}var c = new Car('red’);
Object.getPrototypeOf(c) === Car.prototype //true
Object.create方法用于从原型对象生成新的实例对象,可以替代new命令。
Object.getOwnPropertyNames方法返回一个数组,成员是对象本身的所有属性的键名,不包含继承的属性键名。
对象实例的hasOwnProperty方法返回一个布尔值,用于判断某个属性定义在对象自身,还是定义在原型链上。
var arr = [1,2,3];
var arr = [];arr[0] =1;
var arr = [1,'a',{name:'a'},function(){}];
var a=new Array(); var a2=new Array(10); //包含10个数组项但为undefined的数组var a3=new Array(1,2,3,4); //包含4个数组项,并且分别有值
3、数组长度var arr = [1];arr.length=3;arr[1] //undefined
var arr = [1,2]arr.push(3) // [1,2,3]arr.push('a','b') //[1,2,3,'a','b']// shift()是删除数组的一个元素。 arr.shift() // [2,3,'a',’b']
稀疏数组是指包含从0开始的不连续索引的数组。通常,数组的length属性值代表数组中元素的个数,但如果是稀疏数组,length属性值大于元素的个数。
var arr = [[1],[2,3]];arr[0][0] // 1arr[1][1] //3
7、遍历数组
使用for循环、while循环、for..in或者forEach()方法来遍历数组
// for循环 for(var i = 0; i < a.length; i++) { console.log(a[i]); }//whilevar i = 0; while (i < a.length) { console.log(a[i]); i++; }//for..infor (var i in a) { console.log(a[i]); }//forEacha.forEach(function(v){ console.log(v);})
var o = { 0: 'a', 1: 'b', length:2}o[0] // "a"o[1] // "b"o.length // 2
function
关键字来声明,后跟一组参数以及函数体,这些参数在函数体内像局部变量一样工作。function test(num){ if(num > 2){ return num; }else{ return ; }}
如果函数挂载在一个对象上,将作为对象的一个属性,就称它为对象的方法。
var o = { test: function(){}}
test()就是对象o的方法。
function name() {}
var f = function(x){ console.log(x); }
var f=new Function('x','y','return x+y');
Function()函数定义还可以通过Function()构造函数来定义
等价于
var f=function(x,y){ return x+y;}
函数声明语句也会“被提前”到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被在它定义之前出现的代码所调用。
f()function f(){}
注意:以表达式定义的函数并没有“被提前”,而是以变量的形式“被提前”。
f(); //等同于var f; f(); //调用时只是声明了,没有赋值,未定义var f = function (){}; // TypeError: f is not a function
4、嵌套函数function test(){ var name = 'tg'; function test2(){ var age = 10; console.log(name); // "tg" } console.log(age); // Uncaught ReferenceError: age is not defined}
arguments
出现了,其指向实参对象的引用,实参对象是一个类数组对象function go(x){ console.log(arguments[0]); console.log(arguments[1]); } go(1,2); //1//2
arguments
有一个length
属性,用以标识其所包含元素的个数。Array.prototype.slice.call(arguments, 0);//更简洁的写法[].slice.call(arguments, 0);
function test(obj){ obj.name = 'tg';}var person = new Object();test(person);console.log(person.name); // “tg"
name属性返回紧跟在function关键字之后的那个函数名。
function f(){}f.name //f
函数的length属性是只读属性,代表函数形参的数量,也就是在函数定义时给出的形参个数。
每一个函数都包含一个prototype属性,这个属性指向一个对象的引用,这个对象称做“原型对象”(prototype object)。
apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
(5)eval命令
将字符串当作语句执行
eval('var a=1');a //1
- JavaScript基本概念(二)
- JavaScript基本概念(二)
- JavaScript基本概念(二)
- JavaScript基本概念(二)
- 《javascript高级程序设计》读书笔记(二)javascript基本概念
- JavaScript基本概念(一)
- JavaScript基本概念(一)
- JavaScript基本概念(三)
- JavaScript基本概念(四)
- JavaScript基本概念(一)
- JavaScript基本概念(三)
- JavaScript基本概念(一)
- JavaScript基本概念(三)
- JavaScript基本概念(四)
- JavaScript基本概念(五)
- JavaScript基本概念(笔记)
- JavaScript基本概念(四)
- JavaScript思考之二:函数的基本概念
- ARC指南1 - strong和weak指针
- 用grpc_cb代替grpc++
- Iterm2 && Oh-my-zsh配置mac终端
- 这个发现是否会是RSA算法的BUG、或者可能存在的破解方式?
- 三个简单的算法——选择排序
- JavaScript基本概念(二)
- 2016总结与2017展望
- 蓝桥杯之奇怪的比赛
- Implement strStr()
- maven下载源代码
- linux c学习笔记----管道文件(pipe,popen,mkfifo,pclose,dup2)
- Redis简单示例
- JavaScript基本概念(三)
- Android RecyclerView item动态添加控件重复问题