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;//表示无限大

Number("ab1") //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
 

 

posted @ 2020-12-08 10:04  海龟123  阅读(101)  评论(0编辑  收藏  举报