js基础知识
1、js数据类型:原始类型(数字,字符串,布尔值,null,undefined),对象类型(日期,正则,数组,函数)。
2、js中字符串是不可改变的。数组和对象时可变的。
3、js中变量时无类型的,用var声明。一个变量可以赋予不同的值。
4、js中无穷大用Infinity -Infinity表示。
5、js不区分整形 和浮点型,都按浮点型算。
6、js中的算术运算。Math.pow round min max sqrt sin log ceil floor abs PI E exp() radom
7、Math.round()//四舍五入 Math.ceil()//向上求整 Math.floor()//向下求整
8、js中原始值的比较是值的比较,而对象则不是,两个不同的对象永不相等(尽管属性和值相等)。
9、仅当两个对象引用同一个基对象时,其才相等。
10、对象转换为字符串:toString()和valueOf()方法
11、js中变量作用域:
js中变量的作用域是函数式的(c语言是块级作用域)。全局变量是指不在任何函数内声明的变量。
全局变量声明时,可以不用var,但局部变量必须要用var。
js中未用var声明的都是全局变量,视为全局对象的属性。
js中函数的声明可以嵌套;
js在函数内声明的变量在整个函数体内都可用,并且在声明之前也可用。这叫声明提前。
js中的作用域链:创建时由里到外(直到全局对象)。
12、===严格相等,用于检验两个操作数是否严格相等。 对应!=
==用来检验两个操作数是否相等,允许类型转换 对应 !==
13、js中字符串的比较是字符的比较。区分大小写,并按照Unicode编码的大小比较。所以所有大写字母小于小写字母。
“11”<3 flase 等价于11》3 “11”《"3" true 等价于字符串的比较。
14、in运算符左边是字符串或可以转换为字符串的值,右边是对象如:a=[1,2,3] "0" in a true 0 in a true 3in a false
instanceof左边是对象,右边是对象的类(如:number object array等)
15、typeof 操作数可以使任意类型。返回”string“ function undefined object number boolen等
16、delete云算法:delete a[2] delete o.x
17、js 对象属性的特性:可写,可枚举,可配置。
js对象的属性可以动态添加。
18、delete只能删除自有属性,而不能删除继承属性,要想删除必须在其原型上操作,
delete只是断开了属性和对象的关系,并不会删除属性中的属性。所以在销毁对象时要遍历属性中的属性,并全部删除。以免内存泄露。
delete o.x
20、js中检查属性的方法:
“x” in o
o.hasOwnProperty("x");
Object.prototype.propertyIsEnumerable("toString")//false tosting方法不可枚举
21、in运算符用来检测对象是否存在该属性,“tostring” in object;true
for in 语句用来遍历所有可枚举属性,而内置属性不可遍历tostring。
for in语句可以遍历继承和自有属性中所有可枚举的。
22、类似,ecmascript5有两个类似方法:
Object.keys[]//返回对象可枚举的自有属性的数组
Object.getOwnPropertyName()//返回所偶自有属性包括不可枚举的
而forin中可以遍历继承属性。
23、关于ecmascript5中的新特性:
1、ecmascript5提供了setter、getter方法来代替属性。存取器属性也是可以继承的。
var o={x:1,y:1
set r(x,y){this.x=x;this.y=y},}
2、ecmascript3中程序员创建的属性都是可写,枚举,配置的
ecmascript5提供了新的方法来修改:
ecmascript5中将对象的属性包括一个名字和四个特性(值,可写,可枚举,可配置)
存取器属性的四个特性包括(get,set,可枚举,可配置)。
ecmascript5提供Object.getOwnPropertyDescriptor(o,“x”)获取属性的描述符:{Value:1,writeable:true,..}
这个方法对继承属性和不存在的属性返回undefined。
ecmascript5同时提供Object.defineProperty(o,"x",{value:1,writable:true,enumerable:false,configurable,})来对对象的自有属性进行修改。同时修改多个属性用:
Object.defineProperties(o,{});
24、对象的三个属性:
原型属性, Object.getPrototypeOf() ecmascript5中
o.constructor.prototype
isPrototypeOf(o)用来检测是否是o的原型
类属性:Object.prototype.toString.call(o).slice(8,-1);
可扩展性:主要是指是否可以给对象添加新属性。
25、ecmascript5序列化对象是指将对象化为字符串和还原。
JSON.stringify JSON.parse()