js运算符
delete运算符,删除对象的属性 delete obj.x
in运算符
instanceof运算符
typeof运算符
new运算符
this运算符
void运算符
js由语句组成 语句遵守特定的语法规则
if while with
block块语句 一对花括号定义,没有块级作用域(var变量)
var 声明变量语句
try-catch-finally()
function 语句定义函数
function fd(){ 函数声明,会被预先声明,声明前置,可以在函数声明前面调用,但是函数表达式不可以提前调用
}
var fe = function(){ 函数表达式
}
for..in 遍历语句 没有顺序
switch 条件分支语句
while do-while for 循环语句
with修改作用于,不建议使用
with({x:1}){
console.log(x)
}
js严格模式 'use strict' 可以放在函数名前面或者函数体第一行
'use strict'
function fc{
}
js对象
属性可以动态添加
每个属性都有一个字符串key和对象的值value
var obj = {x:1,y:2}
obj.z = 3
原始数据类型:object,number,string,boolean,null,undefined
object对象->Function,Array Date...
对象原形 prototype
每个属性 都有属性标签
writable
enumerable
configurable
value
get/set
对象原型 prototype
function foo(){}
foo.prototype.z = 3;
var obj =new foo();
console.log(obj.z) ==>3
创建对象:
1.字面量
var obj1 = {x:1,y:2}
var obj2 = {
x:1,
y:2,
o:{
z:3,
n:4
}
}
2.new/原型链
foo ->foo.prototype->Object.prototype(逐步向上查找,指导找不到返回null)
function foo(){}
foo.prototype.z =3;
var obj = new foo();
obj.x = 1;
obj.y = 2;
obj.x =>1
obj.y=> 2
obj.z=> 3(foo.prototype原型上定义的)
typeof obj.tostring => function (Object.prototype原型上创建的函数)
'z' in obj =>true //继承而来
obj.hasOwnProperty('z') =>false //自己本身没有属性z
delete只能删除对象属性,不能删除原型链属性,只能继承原型链上的属性,不能修改
bbb.png aaa.png
3.Object.create 系统内置的函数,接收参数,返回一个对象,对象的原型指向这个参数
var obj = Object.create({x:1})
obj.x =>1
typeof obj.toString =>function
obj.hasOwnProperty('x') =>false 不是obj属性,是原型链prototype上的属性
ccc.png
属性操作:读写属性 删除属性 检测属性 枚举属性 属性异常
属性读 obj.x 等同 obj['x']
for(p in obj) 遍历属性,没有顺序,有可能读出原型链上的属性
删除属性 delete obj.x 等同于 delete obj['x'] ==>返回的结果 对象中是否有此属性
属性检测 in,对象是否存在此属性包括原型链, 'x' in obj
属性是否可枚举 obj.propertyIsEnumerable('x') =>true
属性 get/set方法
var man ={
name:'shadow',
get age()
return 18;
}
set age(val){
console.log('hello shadow');
}
}
数组
弱类型 可以包含不同类型的元素 可以是对象或者其他数组
var arr = [1,2.0,“3”,{a:1,b:2},[1,2]]
var arr2 = new Array(true,false,null,1,"hi")
读取 arr[0] == >1
删除 delete arr[0] ,arr[0] undefined 长度不会变
push 在后面添加
arr.push(3)
unshift 在数组前面添加
arr.unshift(0)
pop 删除数组尾部元素 等同 arr.length -= 1
shift 删除数组头部元素
数组遍历
for /for-in(没有顺序)
稀疏数组 并不含有从0开始的连续索引,一般length属性值比书籍元素个数大
var arr3 = new Array(100) //数组长度length = 100
arr3[99] = 123
arr3[1] = "shadow" //可以随意执行元素的下标
arr3[2] ;undefined
数组方法
join() 数组连接
reverse() 数组逆序,影响原数组
sort() 排序 原数组会被修改
var arr =['a','c','b']
arr.sort();=>['a','b','c']
arr.sort(function(a,b)){ //从小到大排序
return a-b;
}
concat() 合并数组 原数组不会被修改
arr.concat([10,11],13) ==>['a','c','b',10,11,13]
slice() 返回部分数组 左闭右开,取起始位置元素,不取结束位置元素,原数组不会被修改
var arr = [1,2,3,4,5]
arr.slice(1,3) =>[2,3]
arr.slice(1) =>[2,3,4,5] 没有结束位置,截取到尾
arr.slice(1,-1) =>[2,3,4] -1,表示从数组后面往前数
arr.slice(-4,-3) =>2,起始位置也可以为负数,从后往前数,定位起始位置
splice() 数组拼接 会修改原数组
var arr =[1,2,3,4]
arr.splice(2) =>[3,4]
arr =>[1,2] 修改原数组
arr.splice(2,1) =>[3] ,从第2位开始截取,截取1位
arr.splice(1,1,'a','b') =>[2],从第一位开始截取,截取1位,截取的位置被a,b填补
arr;=>[1,'a','b',3,4]
forEach(function(x,index,a)) 数组遍历,参数函数,x -> 值,index->下标, a ->指向数组本身
map(function(x)) 数组映射,原数组不会被修改
var arr = [1,2,3]
arr.map(function(x){
return x+10
}) =>[11,12,13]
filter(function(x,index)) 数组过滤,不会修改原数组
every(function(x)) .数组判断,每一个都要比较
arr.every(function(x){
return x < 10;
}) =>true
some(function(x)) 数组判断,只要有一个符合条件,就true
arr.some(function(x){
return x === 1;
}) =>true
Array.isArray([]) 对象是否是数组 instanceof
网友评论