JS1.
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
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.
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.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 .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.( 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 关键字