1.弱类型特性
不需要声明,数据类型通过赋值即可改变,和Java等这种强类型特性有着很大的不同
2.数据类型
2.1 原始类型
number,string,boolean,null,undefined
2.2对象
函数(function),数组,日期(date)等
3.隐式转换
3.1 加号与减号
“32”-32 //0
“32”+32//"3232"
32+32//64
加号是变成字符串,减号是变成数字
3.2 等于与严格等于
3.2.1 等于
“1.23” == 1.23
0 == false
1 == true
null == undefined
new Object() == new Object()
[1,2] == [1,2]
当对象与string或者number进行比较的时候,会先把对象转换成基本类型
3.2.2 严格等于
严格等于既判断类型又判断值
null===null,undefined === undefined
注意 NaN 不等于NaN
JavaScript中的对象是用引用去比较而不是用值去比较所以new Object不等于 new Object
4.包装对象
var a = "string"
var b = new String("string")
string,number和Boolean都有包装对象
var a = "string"
alert(a.length)//6
a.t = 3;
alert(a.t)//undefined
当我们尝试以对象的方式去访问基本类型的时候(比如var a = "string"
alert(a.length)//6,基本类型没有属性和方法,只有对象有属性和方法)
JavaScript会非常智能地把基本类型临时转换成包装类型的对象,以此来访问成属性和方法。当赋值完成会把这个临时对象销毁掉,所以a.t = 3;(赋值后就被销毁)
alert(a.t)//undefined
5. 类型检查
5.1 typeof
typeof null // "object"(历史遗留问题)
typeof NaN // "number"
typeof 100 // "number"
typeof (undefined) //"undefined"
5.2 instanceof 具体判断对象是什么对象
5.3 Oject.prototype.toString
Oject.prototype.toString.apply([]) === "[object Array]"
Oject.prototype.toString.apply(function(){}) === "[object Function]"
Oject.prototype.toString.apply(null) === "[object Null]"
Oject.prototype.toString.apply(undefined) === "[object Undefined]"
6 表达式
3.14,“test” 关键字(this,null,true)变量(i,k,j)对象,函数都是表达式
c?a:b true 是a, false 是 b,
var a = (1,2,3) // a = 3
delete obj.x
Object.deleteProperty(obj,"x",{configurable:false,value:1});
delete obj.x // false
in
window.x = 1
"x" in window // true
function Foo(){}
Foo.prototype.x = 1;
var obj = new Foo();
obj.x = 1;
obj.hasOwnProperty("x") // false
obj._proto_.hasOwnProperty("x") // true
void 0 // undefined
void ("0") //undefined
7 块语句 block
一个块花括号括起来的语句(一个或几个语句)
没有块级作用域
for(var i = 0; i <10; i++){
var str = "hi";
console.info(str)}
console.info(i) // 10
var a = b = 1; b是全局对象
8 try catch finally
finally 都会执行,当有异常时执行catch,内部的finally先于外部的catch执行
9 function
fd()//true
function fd(){
}
fe()//false
var fe = function(){
}
for in
注意顺序不确定
10 严格模式
“use strict”
10.1 不允许使用with
10.2 不允许未声明的变量被赋值
未声明的变量被赋值,这个变量就变成了全局变量
10.3 禁止八进制的值
11 对象
对象包含属性,属性是无序的,每个属性都有key和value
网友评论