JS1.

 

1.什么是 (Javascript)

1.1概述

Javascript 是一门世界上最流行的脚本语言

Java javascript

10天开发的语言

1.2历史

ECMAScript是由网景的布兰登·艾奇开发的一种脚本语言的标准化规范;最初命名为Mocha,后来改名为LiveScript,最后重命名为JavaScript。 1995年12月,升阳与网景联合发表了JavaScript。 1996年11月,网景公司将JavaScript提交给 欧洲计算机制造商协会 进行标准化。

中文名: ECMAScript

标准化组织: ECMA

特点: 万维网上应用广泛

简称: ES

类别: 脚本程序设计语言

 

网景 公司

2. 快速入门

2.1 引用Javascript

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>


<!--  script 标签中 ,写Javascript代码   -->
   
   <script>
       alert("Hello World")
   </script>

<!--  不用显示 定义 type ,也默认就是javascript -->
   
   <script type="text/javascript">
   </script>

</head>
<body>

</body>
</html>

alert 弹窗

也可以 src 外部引用

2.2 基础语法

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
 <script>
   // 1. 定义变量 变量类型 变量名 = 变量值
    var score  = 77;
   // 2.控制流程
   if(score>60 && score<70){
        alert("60~70")
  }else if(score>70 &&  score<80){
        alert("70~~80")
  }else
        alert("other")
/*
console.log() 在浏览器的控制台打印变量!相当于Java的 System.out.println();
*/

 </script>

</head>
<body>

</body>
</html>

 

 

2.3 数据类型

数值 文本 ,图像 ,音频 , 视频

 

变量

var    命名规范

 

nubmer

js 不区分大小写和整数, Number

123  //整数  
123.1  // 浮点数
1.234    // 小数  
-99    //复数
NaN     //not a number
Infinity  //表示无限大  

 

字符串

“abc” 'abc'

布尔值

true false

 

逻辑运算符

 

&&      两个都为真,结果为真

||     一个为真 ,结果为真

!       取反

 

比较运算符

 

=  赋值符号 
==   等于 (类型不一样 ,值一样 ,也会判断为 true)
===   绝对等于 (类型一样,值一样 ,结果true)

 

这个是js的缺陷,坚持不要使用==比较

须知 :

1.NaN===NaN ,这个与所有的数值都不相等, 包括自己

2.只能通过 is NaN(NaN)来判断这个数是否是NaN

 

浮点数问题:

console.long((1/3)===(1-2/3))

尽量避免使用浮点数进行运算,存在精度问题!

Math.abs((1/3)-(1-2/3))<0.000000000001

 

null 和 undefined

null 空

undefined 未定义

 

数组

java的数值必须是相同类型的对象~ js中不需要这样

 

//保证代码的可读性,尽可能使用[]
var  arr = [1, 2, 3, 4, nuber, null, true,]
   
new Array(1,12,12,12,1,21,5,151,5 'hello')    

取数组下标:如果越界了 ,就会

undefined

 

对象

对象是大括号 数组是中括号

 

var person={
    name:xiaoxsheng
    age:3
    tags:['JS''JAVA''HTML']  
}

取对象的值

1.person.name
 >>xiaoxsheng
2.person.age
 >>3

2.4 严格检测模式

/*
前提:IEDA 需要设置支持ES6语法
'use strict'; 严格检查模式 ,预防javaScript的随意性导致产生的一些问题 局部变量建议都使用let去定义
*/
<script>
 'use strict'
   let i =1;
 //ES6 let
</script>

3.数据类型

 

3.1 字符串

1.正常字符串我们使用 单引号 或者 双引号 包裹

2.注意转义字符\

\'
\n
\t
\u4e2d       Unicode 字符
\x4l          Ascll  字符

3.多行字符串

<script>
‘use strict’
//tab 上面 esc 下面
var  mag=
`hello
 world
  你好  
 `
</script>

4.模板字符串

 lent name ='xiaoxheng';
let  age=3;  
let  msg = `你好啊,${name}`

console.log(msg) 你好啊,xiaoxheng

5.字符串长度

str.lenght

6.字符串的可变性,不可变

3.2数组

Array可以包含任意的数据类型

 

var arr =[1,2,3,4,5] //通过下标取值和赋值
arr[0]  =    赋值
arr[1]  =    赋值

 

1.长度

arr.length

注意:加入给arr.length赋值,数组大小就会发生变化~ 如果赋值过小,元素就会丢失

2.indexOf,通过元素获得下标索引

var  arr[1,2,3,2,1,]
   arr.indexof(1)
   >>2

3.slice () 截取array的一部分,返回一个新的数组,类似于string中的substing

4.push() , pop ()

push : 压入到尾部
pop  :弹出尾部的一个元素    

5.unshift() ,shift()

unshift : 压入到尾部
shift :弹出尾部的一个元素  

6.排序sort()

7.反转元素reverse()

8.concat() 合并数组

var  arr[1,2,3,]
   arr.concat([3,2,1])
  [1,2,3,3,2,1]
   arr[1,2,3,]

注意:concat()并没有修改数组,只会返回一个新数组

9.连接符 join

打印拼接数组,使用特定的字符串链接

var  arr[1,2,3,]
   arr.join('-')
   "1-2-3"

10.多维数组

arr=[[1,2][3,4]]
   arr[1][1]
   >>2

 

数组:存储数据(如何存,如何取,方法都可以自己实现!)

 

3.3对象

若干个键值对

var            对象名 ={
       属性名=属性值
}
     //定义一个person对象,它有四个属性
ver person={
    name=“xiaoli”,
    age =20,
    eamil=“2571057916@qq.com”,
    score=0    
}

js中对象,{......}表示一个对象,键值对描述属性xxxx;xxxxxxxx多个属性之间使用逗号隔开,最后一个属性不加逗号!

js 中所有的键都是字符串,值是任意对象!

1.对象赋值

person.name=xiaoli
"xiaoli"
person.name
"xiaoli"

2.使用一个不存在的对象属性,不会报错!undefined

person.hihi
   undefined

3.动态的删减属性,通过delete 删除对象的属性

delete person.name
true
person

4.动态的添加,直接给新的属性添加即可

person.haha=“haha”
   "haha"
   person

5.判断属性是否在这个对象中

'age' in person
true

6.判断一个属性是否是这个对象自身拥有的hasOwnproperty()

person.hasOwnproperty('age')
true

 

3.4流程控制

1.if 判断

var age=3;
if(age>3){
    alert("大于三岁")
}eles if(age<3){
    alert("小于三岁")
}eles{
    alert("不合法")
}

2.while 循环 避免死循环

while(age<100){
   age=age+1
   console.log(age)
}

do{
   age=age+1
   console.log(age)
}while(age<100)

3.for 循环

for(let i=0;i<100;i++){
   console.log(i)
}

4.数组循环

forEach循环

var arr[1,2,3,4,5,6,7,8,9];

age.forEach(function(value)){
           console.log(value)
          }

 

3.5 Map 和 Set

ES6的新特性

Map

//ES6  Map
//名字 和成绩
//var name = ["tom","jerry","xiaoli","godan"]
//var score= [100,90,80,70,]

var map =new Map([['tom',100],['jerry',90]['xiaoli',60]])
var name=map.get('tom');//通过key获得value
map.set('admin',123)//新增或修改
map.delent("tom");//删除

Set:无序不重复的集合

set.add(2);//添加!
set.delete(1);//删除
console.log(set.has(3));//是否包含某个元素!

4 函数

4.1定义函数

绝对值函数

定义方式一

function  abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

一旦执行到return 代表函数结束,返回结果 !

如果没有执行return 函数执行完也会返回结果, 结果就是undefined

定义方式二

var  abs=function(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

function(x){...}这是一个匿名函数 . 但是可以把结果赋值给abs,通过adc就可以调用函数

方式一 和方式二等价!

 

参数问题 javascript 可以传任意个参数,也可以不传参数~

参数进来是否存在的问题?

假设不存在参数,如何回避?


arguments

arguments 是一个 JS免费赠送的关键字;

代表,传递进来的所有参数,是一个数组!

var  abs=function(x){
   
   console.log("x>="+x)
   
     for(var i=0;i<arguments.length;i++){
         consonle.log(arguments[i])
    }
         
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

问题:arguments 包含所用的参数 ,我们有时候想使用多余的参数来进行附加操作.需要排除啊已有的参数~

 

rest

ES6 引入的新特性,获取除了已经定义的参数之外的所有参数~ {...}

以前:

if(arguments.length>2){
   for(var i =2 ; i<arguments.length;i++){
  }
}

现在

 function arr(a,b,...rest){
   console.log("a>="+a);
   console.log("b>="+b);
   console.log(rest);
}

rest 参数只能写在最后面,必须用...标识.

 

4.2 变量的作用域

在javascript中,var定义变量实际是有作用域的

假设在函数体中声明,则在函数体外可以使用~(非要想实现的话,后面可以研究一下 闭包)

function xl(){
   var x = 1;
   x= x + 1;
}
x= x + 2; //Uncaught ReferncrError: x is not defined

如果两个函数使用了相同的变两名,只要在函数内部 ,就不冲突

function xl(){
   var x = 1;
   x = x + 1;
}
function xl(2){
   var x = 'A';
   x = x + 1;
}

内部函数可以访问外部函数的成员,反之则不行

function xl(){
   var x = 1;
   
  //内部函数可以访问外部函数的成员,反之则不行

function xl(2){
   var y = x+1; //2
}

var z = y+1;//Uncaught ReferncrError: x is not defined
}

假设,内部函数变量和外部函数的变量,重名!

function xl(){
  var x = 1;
   
 
  function xl2(){
     var x = 'A';
     console.log('inner'+x);//innerA
  }
    console.log('outer'+x);//outer1
      xl2()
}
xl()

假设在JavaScript 中函数查找变量从自身函数开始~,由 内向外查找

假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

 

提升变量的作用域

function xl(){
    var x ="x"+y;
    console.log(x);
    var y ='y';
}

 

结果:xundefined

说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值;

function   qj(){
   var y;
   
   var x = "x"+y
   console.log(X);
   y = 'y'
}

这个是javaScript建立之初就存在的特性. 养成规范:所有的变量定义都放在函数的头部,不要乱放 方便于代码的维护

function qj2(){
   var x = 1
       y = x+1
       z i a ;//undefined
   
   //之后随意
}

全局变量

//全局变量
  x=1;

function f(){
   console.log(x);
}
f()
console.log(x)

全局对象 window

var x ='xxx';
alert(x);
alert(window.x); // 默认所用的全局变量,都会自动绑定在 window对象下;

 

alert()这个函数本身 也是一个 window 变量;

var x ='xxx';

window.alert(x);

var old_alert =window.alert;

//old_alert(x);

window.alert=function(){
   
}:

//发现alert()失败了

window.alert(123);

//恢复
window.alert = old_alert
window.alert(456);    

 

javascript 实际上只有一个全局作用域 ,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错

 

规范

由于我们所有的全局变量都会绑定到我们的window 上 .如果 不同的js文件,使用了相同的全局变量,冲突 ~> 如何能够减少冲突?

//唯一全局变量

var kuangAPP.={};

//定义 全局变量
kuangAPP.name='xiaoli'
kuangAPP.add= function(a,b){
    return a + b;
}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局名冲突的问题~

jQuery

局部作用域let

function  aaa(){
   for (var i =0; i<100 ; i++){
       console.log(i)
}
      console.log(i+1) // 问题
}

ES6 let 关键字 ,解决局部作用域冲突问题!

function  aaa(){
   for (let i =0; i<100 ; i++){
   console.log(i)
}
   console.log(i+1) //Uncaught ReferncrError: x is not defined
}

 

常量 const

在ES6之前, 怎么定义常量:只有全局大写字母命名的变量就是常量; 建议不要修改这样的值

var PI='3.1';

console.log(PI);
PI='1312';//可以改变
console.log(PI);

在ES6引入了常量关键字 const

const PI='3.1';   //只读变量
console.log(PI);
PI='1312';//不可以改变

4.3 方法

定义方法

方法就是把函数放在 对象的里面,对象只有两个东西:属性和方法

 var xiaoli={
    name:'小李'
    bitrh:2000
    //方法
    age:function(){
        //今年-出生年
        var now = new Date().getFuLLYear();
        return now-this.bitrh;
    }
}
//属性
xiaoli.name
//方法,一定要带()
xiaoli.age()

this. 代表什么? 拆开 上面 的代码看看~

function getAge(){
   //今年-出生的年
    var  now= new Date().getFuLL Year();
   return now-this.bitrh;
}
 
var xiaoli={
   name:'小李',
   bitrh:2000
   age:getAge    
}
//xiaoli.age()ok
//getAge () NaN window

this是无法指向的,是默认指向调用它的那个对象

 

apply

 

在js中可以控制this 指向!

 

function getAge(){
   //今年-出生的年
    var  now= new Date().getFuLL Year();
   return now-this.bitrh;
}
 
var xiaoli={
   name:'小李',
   bitrh:2000
   age:getAge    
}
//xiaoli.age()ok
getAge.apply(xiaoli,[]);

 

5. 内部对象

标准对象

typeof 可以产看数组的类型

 

5.1 Date

基本使用

var now = new Date() ;// (中国标准时间)
now.getFULLYear();//     年
now.getMonth();//   月
now.getDate();// 日
now.getDay();//   星期几
now.getHours();// 时
now.getMinutes();// 分
now.getSeconds();// 秒  

now.getTime(); //时间戳   全世界统一  

console.log(new Date(1578106175991)) //时间戳 转换时间

 

转换

now = new Date(1578106175991)
Sat  Jan ...........(中国时间)

 

5.2 Json

早期,所有数据传输习惯使用XML 文件!

1.JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

2.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

在JavaScript 一切皆为对象 .任何js支持的类型都可以用json来表达; nuber,string...

 

格式:

1.对象都用{}

2.数组都用[]

3.所用的键值对都是用 key:value

var user ={
   name:"qinjiang"
   age:3
   sex:'男'
}

//对象转化为json字符窜{ "name":"qinjiang" ,"age":3,"sex":'男'}
var jsonUser =JSON.stringify(user);

//Json 字符串转化为对象, 参数为Json 字符串
var obj =Json.parse('{"name":"qinjiang" ,"age":3,"sex":''}');

 

很多人搞不清json 和js 对象的区别

var obj ={a:'hello',b:'helloworld'}
var json ='{"a":"hello","b":"helloworld"}'

 

6.面向对象编程

6.1 什么是面向对象

javascript , JAVA ,C# ,面向对象, javascript有些区别

 

  • 类: 模板

  • 对象:具体的实例

     

class继承

 

class 关键字

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.什么是 (Javascript)

1.1概述

Javascript 是一门世界上最流行的脚本语言

Java javascript

10天开发的语言

1.2历史

ECMAScript是由网景的布兰登·艾奇开发的一种脚本语言的标准化规范;最初命名为Mocha,后来改名为LiveScript,最后重命名为JavaScript。 1995年12月,升阳与网景联合发表了JavaScript。 1996年11月,网景公司将JavaScript提交给 欧洲计算机制造商协会 进行标准化。

中文名: ECMAScript

标准化组织: ECMA

特点: 万维网上应用广泛

简称: ES

类别: 脚本程序设计语言

 

网景 公司

2. 快速入门

2.1 引用Javascript

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>


<!--  script 标签中 ,写Javascript代码   -->
   
   <script>
       alert("Hello World")
   </script>

<!--  不用显示 定义 type ,也默认就是javascript -->
   
   <script type="text/javascript">
   </script>

</head>
<body>

</body>
</html>

alert 弹窗

也可以 src 外部引用

2.2 基础语法

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
 <script>
   // 1. 定义变量 变量类型 变量名 = 变量值
    var score  = 77;
   // 2.控制流程
   if(score>60 && score<70){
        alert("60~70")
  }else if(score>70 &&  score<80){
        alert("70~~80")
  }else
        alert("other")
/*
console.log() 在浏览器的控制台打印变量!相当于Java的 System.out.println();
*/

 </script>

</head>
<body>

</body>
</html>

image-20210713085224473

2.3 数据类型

数值 文本 ,图像 ,音频 , 视频

 

变量

var    命名规范

 

nubmer

js 不区分大小写和整数, Number

123  //整数  
123.1  // 浮点数
1.234    // 小数  
-99    //复数
NaN     //not a number
Infinity  //表示无限大  

 

字符串

“abc” 'abc'

布尔值

true false

 

逻辑运算符

 

&&      两个都为真,结果为真

||     一个为真 ,结果为真

      取反

 

比较运算符

 

=  赋值符号 
==   等于 (类型不一样 ,值一样 ,也会判断为 true)
===   绝对等于 (类型一样,值一样 ,结果true)

 

这个是js的缺陷,坚持不要使用==比较

须知 :

1.NaN===NaN ,这个与所有的数值都不相等, 包括自己

2.只能通过 is NaN(NaN)来判断这个数是否是NaN

 

浮点数问题:

console.long((1/3)===(1-2/3))

尽量避免使用浮点数进行运算,存在精度问题!

Math.abs((1/3)-(1-2/3))<0.000000000001

 

null 和 undefined

null 空

undefined 未定义

 

数组

java的数值必须是相同类型的对象~ js中不需要这样

 

//保证代码的可读性,尽可能使用[]
var  arr = [1, 2, 3, 4, nuber, null, true,]
   
new Array(1,12,12,12,1,21,5,151,5 'hello')    

取数组下标:如果越界了 ,就会

undefined

 

对象

对象是大括号 数组是中括号

 

var person={
    name:xiaoxsheng
    age:3
    tags:['JS''JAVA''HTML']  
}

取对象的值

1.person.name
 >>xiaoxsheng
2.person.age
 >>3

2.4 严格检测模式

/*
前提:IEDA 需要设置支持ES6语法
'use strict'; 严格检查模式 ,预防javaScript的随意性导致产生的一些问题 局部变量建议都使用let去定义
*/
<script>
 'use strict'
   let i =1;
 //ES6 let
</script>

3.数据类型

 

3.1 字符串

1.正常字符串我们使用 单引号 或者 双引号 包裹

2.注意转义字符\

\'
\n
\t
\u4e2d       Unicode 字符
\x4l          Ascll  字符

3.多行字符串

<script>
‘use strict’
//tab 上面 esc 下面
var  mag=
`hello
 world
  你好  
 `
</script>

4.模板字符串

 lent name ='xiaoxheng';
let  age=3;  
let  msg = `你好啊,${name}`

console.log(msg) 你好啊,xiaoxheng

5.字符串长度

str.lenght

6.字符串的可变性,不可变

3.2数组

Array可以包含任意的数据类型

 

var arr =[1,2,3,4,5] //通过下标取值和赋值
arr[0]  =    赋值
arr[1]  =    赋值

 

1.长度

arr.length

注意:加入给arr.length赋值,数组大小就会发生变化~ 如果赋值过小,元素就会丢失

2.indexOf,通过元素获得下标索引

var  arr[1,2,3,2,1,]
   arr.indexof(1)
   >>2

3.slice () 截取array的一部分,返回一个新的数组,类似于string中的substing

4.push() , pop ()

push : 压入到尾部
pop  :弹出尾部的一个元素    

5.unshift() ,shift()

unshift : 压入到尾部
shift :弹出尾部的一个元素  

6.排序sort()

7.反转元素reverse()

8.concat() 合并数组

var  arr[1,2,3,]
   arr.concat([3,2,1])
  [1,2,3,3,2,1]
   arr[1,2,3,]

注意:concat()并没有修改数组,只会返回一个新数组

9.连接符 join

打印拼接数组,使用特定的字符串链接

var  arr[1,2,3,]
   arr.join('-')
   "1-2-3"

10.多维数组

arr=[[1,2][3,4]]
   arr[1][1]
   >>2

 

数组:存储数据(如何存,如何取,方法都可以自己实现!)

 

3.3对象

若干个键值对

var            对象名 ={
       属性名=属性值
}
     //定义一个person对象,它有四个属性
ver person={
    name=“xiaoli”,
    age =20,
    eamil=“2571057916@qq.com”,
    score=0    
}

js中对象,{......}表示一个对象,键值对描述属性xxxx;xxxxxxxx多个属性之间使用逗号隔开,最后一个属性不加逗号!

js 中所有的键都是字符串,值是任意对象!

1.对象赋值

person.name=xiaoli
"xiaoli"
person.name
"xiaoli"

2.使用一个不存在的对象属性,不会报错!undefined

person.hihi
   undefined

3.动态的删减属性,通过delete 删除对象的属性

delete person.name
true
person

4.动态的添加,直接给新的属性添加即可

person.haha=“haha”
   "haha"
   person

5.判断属性是否在这个对象中

'age' in person
true

6.判断一个属性是否是这个对象自身拥有的hasOwnproperty()

person.hasOwnproperty('age')
true

 

3.4流程控制

1.if 判断

var age=3;
if(age>3){
    alert("大于三岁")
}eles if(age<3){
    alert("小于三岁")
}eles{
    alert("不合法")
}

2.while 循环 避免死循环

while(age<100){
   age=age+1
   console.log(age)
}

do{
   age=age+1
   console.log(age)
}while(age<100)

3.for 循环

for(let i=0;i<100;i++){
   console.log(i)
}

4.数组循环

forEach循环

var arr[1,2,3,4,5,6,7,8,9];

age.forEach(function(value)){
           console.log(value)
          }

 

3.5 Map 和 Set

ES6的新特性

Map

//ES6  Map
//名字 和成绩
//var name = ["tom","jerry","xiaoli","godan"]
//var score= [100,90,80,70,]

var map =new Map([['tom',100],['jerry',90]['xiaoli',60]])
var name=map.get('tom');//通过key获得value
map.set('admin',123)//新增或修改
map.delent("tom");//删除

Set:无序不重复的集合

set.add(2);//添加!
set.delete(1);//删除
console.log(set.has(3));//是否包含某个元素!

4 函数

4.1定义函数

绝对值函数

定义方式一

function  abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

一旦执行到return 代表函数结束,返回结果 !

如果没有执行return 函数执行完也会返回结果, 结果就是undefined

定义方式二

var  abs=function(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

function(x){...}这是一个匿名函数 . 但是可以把结果赋值给abs,通过adc就可以调用函数

方式一 和方式二等价!

 

参数问题 javascript 可以传任意个参数,也可以不传参数~

参数进来是否存在的问题?

假设不存在参数,如何回避?


arguments

arguments 是一个 JS免费赠送的关键字;

代表,传递进来的所有参数,是一个数组!

var  abs=function(x){
   
   console.log("x>="+x)
   
     for(var i=0;i<arguments.length;i++){
         consonle.log(arguments[i])
    }
         
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

问题:arguments 包含所用的参数 ,我们有时候想使用多余的参数来进行附加操作.需要排除啊已有的参数~

 

rest

ES6 引入的新特性,获取除了已经定义的参数之外的所有参数~ {...}

以前:

if(arguments.length>2){
   for(var i =2 ; i<arguments.length;i++){
  }
}

现在

 function arr(a,b,...rest){
   console.log("a>="+a);
   console.log("b>="+b);
   console.log(rest);
}

rest 参数只能写在最后面,必须用...标识.

 

4.2 变量的作用域

在javascript中,var定义变量实际是有作用域的

假设在函数体中声明,则在函数体外可以使用~(非要想实现的话,后面可以研究一下 闭包)

function xl(){
   var x = 1;
   x= x + 1;
}
x= x + 2; //Uncaught ReferncrError: x is not defined

如果两个函数使用了相同的变两名,只要在函数内部 ,就不冲突

function xl(){
   var x = 1;
   x = x + 1;
}
function xl(2){
   var x = 'A';
   x = x + 1;
}

内部函数可以访问外部函数的成员,反之则不行

function xl(){
   var x = 1;
   
  //内部函数可以访问外部函数的成员,反之则不行

function xl(2){
   var y = x+1; //2
}

var z = y+1;//Uncaught ReferncrError: x is not defined
}

假设,内部函数变量和外部函数的变量,重名!

function xl(){
  var x = 1;
   
 
  function xl2(){
     var x = 'A';
     console.log('inner'+x);//innerA
  }
    console.log('outer'+x);//outer1
      xl2()
}
xl()

假设在JavaScript 中函数查找变量从自身函数开始~,由 内向外查找

假设外部存在这个同名的函数变量,则内部函数会屏蔽外部函数的变量

 

提升变量的作用域

function xl(){
    var x ="x"+y;
    console.log(x);
    var y ='y';
}

 

结果:xundefined

说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值;

function   qj(){
   var y;
   
   var x = "x"+y
   console.log(X);
   y = 'y'
}

这个是javaScript建立之初就存在的特性. 养成规范:所有的变量定义都放在函数的头部,不要乱放 方便于代码的维护

function qj2(){
   var x = 1
       y = x+1
       z i a ;//undefined
   
   //之后随意
}

全局变量

//全局变量
  x=1;

function f(){
   console.log(x);
}
f()
console.log(x)

全局对象 window

var x ='xxx';
alert(x);
alert(window.x); // 默认所用的全局变量,都会自动绑定在 window对象下;

 

alert()这个函数本身 也是一个 window 变量;

var x ='xxx';

window.alert(x);

var old_alert =window.alert;

//old_alert(x);

window.alert=function(){
   
}:

//发现alert()失败了

window.alert(123);

//恢复
window.alert = old_alert
window.alert(456);    

 

javascript 实际上只有一个全局作用域 ,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错

 

规范

由于我们所有的全局变量都会绑定到我们的window 上 .如果 不同的js文件,使用了相同的全局变量,冲突 ~> 如何能够减少冲突?

//唯一全局变量

var kuangAPP.={};

//定义 全局变量
kuangAPP.name='xiaoli'
kuangAPP.add= function(a,b){
    return a + b;
}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局名冲突的问题~

jQuery

局部作用域let

function  aaa(){
   for (var i =0; i<100 ; i++){
       console.log(i)
}
      console.log(i+1) // 问题
}

ES6 let 关键字 ,解决局部作用域冲突问题!

function  aaa(){
   for (let i =0; i<100 ; i++){
   console.log(i)
}
   console.log(i+1) //Uncaught ReferncrError: x is not defined
}

 

常量 const

在ES6之前, 怎么定义常量:只有全局大写字母命名的变量就是常量; 建议不要修改这样的值

var PI='3.1';

console.log(PI);
PI='1312';//可以改变
console.log(PI);

在ES6引入了常量关键字 const

const PI='3.1';   //只读变量
console.log(PI);
PI='1312';//不可以改变

4.3 方法

定义方法

方法就是把函数放在 对象的里面,对象只有两个东西:属性和方法

 var xiaoli={
    name:'小李'
    bitrh:2000
    //方法
    age:function(){
        //今年-出生年
        var now = new Date().getFuLLYear();
        return now-this.bitrh;
    }
}
//属性
xiaoli.name
//方法,一定要带()
xiaoli.age()

this. 代表什么? 拆开 上面 的代码看看~

function getAge(){
   //今年-出生的年
    var  now= new Date().getFuLL Year();
   return now-this.bitrh;
}
 
var xiaoli={
   name:'小李',
   bitrh:2000
   age:getAge    
}
//xiaoli.age()ok
//getAge () NaN window

this是无法指向的,是默认指向调用它的那个对象

 

apply

 

在js中可以控制this 指向!

 

function getAge(){
   //今年-出生的年
    var  now= new Date().getFuLL Year();
   return now-this.bitrh;
}
 
var xiaoli={
   name:'小李',
   bitrh:2000
   age:getAge    
}
//xiaoli.age()ok
getAge.apply(xiaoli,[]);

 

5. 内部对象

标准对象

typeof 可以产看数组的类型

 

5.1 Date

基本使用

var now = new Date() ;// (中国标准时间)
now.getFULLYear();//     年
now.getMonth();//   月
now.getDate();// 日
now.getDay();//   星期几
now.getHours();// 时
now.getMinutes();// 分
now.getSeconds();// 秒  

now.getTime(); //时间戳   全世界统一  

console.log(new Date(1578106175991)) //时间戳 转换时间

 

转换

now = new Date(1578106175991)
Sat  Jan ...........(中国时间)

 

5.2 Json

早期,所有数据传输习惯使用XML 文件!

1.JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

2.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

在JavaScript 一切皆为对象 .任何js支持的类型都可以用json来表达; nuber,string...

 

格式:

1.对象都用{}

2.数组都用[]

3.所用的键值对都是用 key:value

var user ={
   name:"qinjiang"
   age:3
   sex:'男'
}

//对象转化为json字符窜{ "name":"qinjiang" ,"age":3,"sex":'男'}
var jsonUser =JSON.stringify(user);

//Json 字符串转化为对象, 参数为Json 字符串
var obj =Json.parse('{"name":"qinjiang" ,"age":3,"sex":''}');

 

很多人搞不清json 和js 对象的区别

var obj ={a:'hello',b:'helloworld'}
var json ='{"a":"hello","b":"helloworld"}'

 

6.面向对象编程

6.1 什么是面向对象

javascript , JAVA ,C# ,面向对象, javascript有些区别

 

  • 类: 模板

  • 对象:具体的实例

     

class继承

 

class 关键字

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2021-09-11 23:00  小白jva  阅读(58)  评论(0编辑  收藏  举报

导航