JavaScript基本语法
javascript 语言精粹
JavaScript简介
JavaScript是一种解释型脚本语言,目的是能够在客户端的网页中增加动态效果和交互能力,
后来,JavaScript被Netscape公司交给ECMA制定标准,成为ECMAScript,最新版ECMAScript6(简称ES6)已经在2015年6月正式发布了。
JS组成
- JS组成:ECMAScript(JS的核心)、DOM(文档对象模型)、BOM(浏览器对象模型)
+ ECMAScript:主要定义了JS的语法
+ DOM:一套操作页面元素的API,DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作
+ BOM:一套操作浏览器功能的API,通过BOM可以操作浏览器窗口
二JavaScript 语法
数据类型
JSd的数据类型分为两大类:
- 简单数据类型(基本数据类型):boolean、number、string、null、undefined
- 内建对象:date,Array
- 复杂数据类型:object(对象字面量),函数
(1)简单数据类型
1.number(数字类型)
JavaScript 只有单一的数字类型,不区分整数和浮点数,它的内部被表示为64位浮点数,所以1和 1.0 是相同的值,这样避免了短类型溢出问题
以下都是合法的number类型:
123;//整数123 0.456;//浮点数0.456 1.2345e3;//等同于1234.5 -99;//负数 NaN;//当无法计算结果是使用NaN表示 Infinity;//表示无限大
//NaN
number存在精度问题
0.2 + 0.1 = 0.30000000000000004 0.1 + 0.2 !== 0.3 //true
数值判定
NaN:Not a Number 不是一个number
NaN==NaN ==>false
isNaN():判断是否是number类型
isNaN(NaN) ===> true isNaN(10) ===> false isNaN("10") ===> false //将字符串隐性的转换为number类型 isNaN(false) ===> false //将boolean转为number类型
2.Boolean
以下的值是为false
false,null,NaN,0,'',undefined
(2)复杂数据类型
1.对象字面量
初始化一个对象 ,属性是否要加引号,如果属性是合法命名可以选择不加,如果是非法命名,如last-name 这样的必须要加引号
//初始化一个空对象 var obj={} 《==》 var obj=new Object(); //初始化一个对象 ,属性是否要加引号,如果属性是合法命名可以选择不加,如果是非法命名,如last-name 这样的必须要加引号 var obj={name:"zhangxin",age:31}; var obj2={"last-name":"zhangxin"} //赋值 obj.name="zhangxin" obj["last-name"]="zhangxin"
2. 原型(Prototype)
每一个对象都连接到一个原型对象,并且可以从中继承属性,所有通过对象字面量创建对象都连接到object.prototype 这个JavaScript中的标准对象。
Object.prototype.Fname="ag" var obj={age:12} obj.Fname //"ag"
3. 反射
检查数据类型 用 typeof
typeof 123 //"number" typeof "abc" // "string" typeof Object //"function" typeof false // "boolean" typeof [] //"object"
三 函数
1. 在JavaScript中函数就是对象,
谁调用this 就是谁
var myObject={ value:0; increment:function(inc){ this.value+= this.value } }
// 以上 value 对于其他程序而言总是可见的,如果想要不可见,可以使用以下的方法:
//和以对象字面量形式去初始化 myObject 不同,以下我们返回一个对象字面量,此函数定义了一个value 变量。
该变量对 increment 和 getValue 总是可用的,但函数的作用域使它对其他的程序来说是不可见的
var myObject1=function()
{ var value=0;
return
{ increment:function(inc){value+=1;},
getValue:function(){return value}
}
}()
myObject.increment(1)
myObject1.increment(1)
函数中嵌套函数 注意 this 赋值
myObject=function() { var that=this; var helper=function(){ that.value=add(that.value,that.value); } }
2. 作用域
在其他语言中,基本都是块级作用域,(在一对花括号中),但是JavaScript确是函数级的作用域,很多现代语言推荐尽可能迟的声明变量,JavaScript中却建议在函数体顶部声明变量
3. 闭包
内部的函数拥有比外部函数更长的生命周期,因此即使外部函数生命周期已经结束,内部函数依然可以调用
闭包产生的问题,这样输出的结果都一样
解决闭包产生的问题
3. 构造器调用模式 !!
JavaScript是一门基于原型继承的语言,
myQuo 继承了Quo 所有的方法,如果给 myQuo 添加自己的方法,可以使用 hasOwnPrototype()
//new 表示新开拓了一块内存,复制了原先中的所有方法和属性,如果实例改变 原型是不变的
functinon Person() {} Person.prototype.name = 'apple'; var person1 = new Person(); var person2 = new Person(); person1.name = 'banana';
console.log(person2.name) //apple