JAVA前端———JavaScript—函数—内部对象(Date,JSON,Ajax)—面向对象

函数

定义函数

  • 方法一—————— 后端使用
  'use strict'
        function abs(x) {
            if(x>=0){
                return x;
            }else{
                return -x;
            }
        }

若执行到return 则代表函数结束

  • 方法二—————— 前端使用
var abs = function (x) {
            if(x>=0){
                return x;
            }else{
                return -x;
            }
        }

function (x) { … } 是一个匿名函数

调用函数
abs(15)
15
abs(-35)
35
参数问题

JavaScript可以传任意个参数 也可以不传参数

  • 不传参数————返回Not a Number

因为传入的参数为空 即为undefined

abs()
NaN
  • 如何避免?——————手动抛出异常
  function abs(x) {
            if (typeof x !== 'number'){
                throw 'Not a Number';
            }
            if(x>=0){
                return x;
            }else{
                return -x;
            }
        }
abs(abs)
定义函数.html?_ijt=296l7kb9n7k4rimfdj6rkfo1go:10 Uncaught Not a Number
  • 传入多个参数————引入关键字arguments
  • arguments———— 是一个数组 里面是传递的所有参数

使用 for 循环遍历参数数组中的所有参数

 var abs = function (x) {
            console.log('x的值为:'+x);
            for (var i = 0;i<arguments.length;i++){
                console.log(arguments[i]);
            }
            if(x>=0){
                return x;
            }else{
                return -x;
            }
        }
abs(20000,2003,2008,2012,2019,2020)
 x的值为:20000
 20000
 2003
 2008
 2012
 2019
 2020

问题:arguments里面包含所有的参数 如何选出 除了已定义的参数之外的所有参数?

  • 传入新函数rest:只能写在参数的最后 并且用 … 进行标识
 var exp = function (x,y,z,...rest) {
            console.log('x的值为:'+x);
            console.log('y的值为:'+y);
            console.log('z的值为:'+z);
            console.log('其余的参数值为:'+rest);
 }
exp(2020,2019)
 x的值为:2020
 y的值为:2019
 z的值为:undefined
 其余的参数值为:
exp(2020,2019,3084,84,153,651)
 x的值为:2020
 y的值为:2019
 z的值为:3084
 其余的参数值为:84,153,651

变量的定义域

  1. 在函数中声明变量后 函数外不能使用
 function f() {
    var a = 2020;
    console.log(a);
  }
console.log(a);  ——————  报错:a未定义 Uncaught ReferenceError: a is not defined
  1. 两个函数使用了相同的变量名 ———— 在各自的函数内则不影响
 		function f() {
            var a = 2020;
            console.log(a);
        }
        function f1() {
            var a = '你好';
            console.log(a);
        }
  1. 内部函数可以访问外部函数成员
function f() {
  var a = 2020;
  function f2() {
      var b = a+1;
   }
   console.log(b);  ———————— 报错:Uncaught ReferenceError: a is not defined
}
  1. 内部函数变量和外部函数变量重名—————就近原则
 		function f() {
            var y = 2020;
            function f2() {
                var y = '你好';
                console.log('inner'+y);
            }
            console.log('outer'+y);
            f2(); ———————— 在f中调用f2函数
        }
        f(); ———————— 在外部调用函数f

网页中显示:

outer2020
inner你好
  1. 提升变量的作用域
 function fun() {
            var z = '2020'+y;
            console.log(z)
           var y = "加油";
       }

网页中显示:

fun()
2020undefined
  • 说明JavaScript引擎自动提升了y的声明 但不会提升它的赋值 相当于如下
			var y;
            var z = '2020'+y;
            console.log(z)
            y = "加油";
  1. 全局函数
		var a = 2019;  ———————— a 为全局变量
        function fun() {
            console.log(a);
        }
        fun();
        console.log(a);

网页中显示:

2019
2019
  1. 全局对象Window
        var x = '某某某';
        alert(x);
        window.alert(x);  ————————结果:网页弹出两个某某某
  • alert( ) 函数本身就是一个Window对象
        window.alert(2020);———————— 弹窗2020
        var old_alert = window.alert;    
        old_alert(2019);———————— 弹窗2019
        window.alert =function () { } ————————覆盖原始的window.alert函数
        window.alert(2018); ———————— 失效
        window.alert = old_alert; ————————恢复原始的window.alert函数
        window.alert(2017); ———————— 弹窗2017
  1. JavaScript 规范
  • 因为JavaScript所有的全局变量都会绑定到window上 若存在不同的文件使用相同的全局变量 就会产生冲突
  • ———————解决方法:把小的代码放进大的自己定义的唯一的变量名中
        var zy = {}
        zy.name = 'xiaohua';
        zy.age = 20;
        zy.hobby = 'sing dance'
        console.log(zy);
  1. let——局部作用域
  • 使用var时:
 for (var i = 2020;i<2030;i++){
            console.log(i)  ———————— 打印2020-2029
        }
        console.log(i+1)  ———————— 打印2031
  • 使用let时:
 for (let i = 2020;i<2030;i++){
            console.log(i) ———————— 打印2020-2029
        }
        console.log(i+1) ————————Uncaught ReferenceError: i is not defined
  1. const 常量
  • 以前使用var定义常量 ———— 可以随便更改常量的值
        var PI = '3.1415926';
        console.log(PI);
        PI = 2.7;
        console.log(PI);
  • 现在使用const定义常量 ———— 只读
        const PI = '3.1415926';
        console.log(PI);
        PI = 2.7;
        console.log(PI); ——— Uncaught TypeError: Assignment to constant variable.

方法

  1. 定义方法
 	  var person = {
            name : 'xiaoming',
            sex : 'man',
            birth:2005,
            age:function () {
                var today = new Date().getFullYear();
                return today - this.birth;  —————— this指向调用它的那个对象
            }
        }

网页中调试 ———— 调用方法时一定要带 ( ) 括号

person.name
"xiaoming"
person.age()   
15

拆开上面的代码

	 	function getAge() {
            var today = new Date().getFullYear();
            return today - this.birth;
        }
        var person = {
            name: 'xiaoming',
            sex: 'man',
            birth: 2005,
            age: getAge
        }
person.age()
15
getAge()
Uncaught TypeError: Cannot read property 'birth' of undefined

若直接调用getAge( ) 则取不到 birth

  1. apply 函数 ————— 在JavaScript中控制this指向
		function getAge() {
            var today = new Date().getFullYear();
            return today - this.birth;
        }
        var Girl = {
            name:'花儿',
            birth:2008,
            age:getAge
        }
        var Boy = {
            name: '小明',
            birth: 2005,
            age: getAge
        }
        getAge.apply(Girl,[]);  ————————   12

内部对象

标准对象

typeof alert
"function"
typeof a 
"undefined"
typeof 123
"number"
typeof '2020'
"string"
typeof undefined
"undefined"
typeof true
"boolean"
typeof []
"object"

Date

  • 基本时间
var now = new Date()
now
Tue Feb 04 2020 12:26:08 GMT+0800 (中国标准时间)
now.getFullYear()  —————— 年
2020
now.getMonth()  —————— 月
1
now.getDate()  —————— 日
4
now.getDay()  —————— 星期
2
now.getHours()  —————— 时
12
now.getMinutes()  —————— 分
26
now.getSeconds()  —————— 秒
8
now.getTime()  —————— 获取从1970110:00分到现在的毫秒值 (全世界统一)
1580790368144
  • 转换时间
now.toLocaleDateString()
"2020/2/4"
now.toGMTString()
"Tue, 04 Feb 2020 04:26:08 GMT"

JSON

  • JavaScript Object Notation ———— 是 JavaScript 对象表示法
  • 定义:JSON 采用完全独立于编程语言的文本格式来存储和表示数据
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言

—— XML也是一种数据交换格式,为什么没有选择XML呢?
—— 因为XML虽然可以作为跨平台的数据交换格式,但是在JS中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量
—— 而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据

  • 使用规范
  • 1. 数据由逗号分隔
  • 2. 大括号保存对象
  • 3. 中括号保存数组
 'use strict'
        var Teacher = {
            name:'张老师',
            age:45,
            subject:'Math'
        }
        var Student = {
            name: '李华',
            age: 20
        }

转义

  • 对象转换为字符串: JSON.stringify( );
var t = JSON.stringify(Teacher);
console.log(t)
{"name":"张老师","age":45,"subject":"Math"}  —————— 字符串
var s = JSON.stringify(Student);
console.log(s)
{"name":"李华","age":20}
  • 字符串转换为对象:
var T = JSON.parse('{"name":"张老师","age":45,"subject":"Math"}')
console.log(T)
{name: "张老师", age: 45, subject: "Math"}  —————— 对象
var S = JSON.parse('{"name":"李华","age":20}')
console.log(S)
{name: "李华", age: 20}

JSON对象和JavaScript对象的区别

    1. JSON对象 —————— 用单引号括起来(外单内双)
 var customer2 = '{"name":"Rose","age":19,"sex":"女"}'
    1. JavaScript对象 ———————— 只用括数据(内单)
 var customer1 = {name:'Jack',age:20,sex:'男'};

Ajax

  • AJAX —— Asynchronous JavaScript And XML
  • 作用:主要是实现页面和 web 服务器之间数据的异步传输 实现网页的==局部刷新 ==是指一种创建交互式网页应用的网页开发技术
  • Ajax = 异步 JavaScript 和 XML 或者是 HTML
  • 异步:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果我们可以再来处理这个事。

Ajax应用

  1. 登录界面时 —— 若还没有登录,页面会弹出一个窗口出来输入账号和密码
    如果不是用ajax做的话,一般都会跳转到另外一个页面让你登录。
  2. 使用邮箱时 —— 会定时自动保存,保存到服务器上的。而这种通信,显然是不能刷新页面的,这就需要用到了AJAX技术。
  3. 提交表单时 —— 可以用来使静态网站访问后台数据库,也可以做无刷新页面表单提交
  4. 浏览淘宝的首页时 —— 不往下滚动,下面的内容是永远不会加载的,往下滚动的时候,网速不是特别快的时候就能看见数据加载了。
  5. 计算淘宝物品的价格时 —— 用到ajax技术,不会影响其它内容
  6. 输入用户名和密码 —— 不会影响其它已输入内容的
    如果不用ajax技术,那么就必须全页面刷新,其它数据又没有保存,就会丢失的!

面向对象

原型对象

  • Jack继承了Person的特性 —————— Jack . __ proto __
 'use strict'
        var Person = {
            name:'张三',
            age:20,
            sing:function () {
                console.log(this.name+' is singing...')
            }
        };
        var Jack = {
            name:'Jack'
        };
       Jack.__proto__ = Person;
Jack.sing()
Jack is singing...
console.log(Jack)
VM80:1 {name: "Jack"}
        name: "Jack"__proto__: 
        name: "张三"
        age: 20
        sing: ƒ ()
        __proto__: Object
  • 添加一个新方法 ———————— student . prototype . hobby =
        function student(name) {
            this.name = name;
        }
        student.prototype.hobby = function () {
           console.log('学生喜欢唱歌跳舞打麻将');
        };

class对象

  • 定义一个类
class Student{
            constructor(name,age){
                this.name = name;
                this.age = age;
            }
            study(){
                console.log('学生都喜欢学习');
            }
        };
        var zhangsan = new Student('zhangsan');
zhangsan.study()
学生都喜欢学习
  • 继承 (ES6 之后)
 class Student{
            constructor(name,age){
                this.name = name;
                this.age = age;
            }
            study(){
                console.log('学生都喜欢学习');
            }
        };
        class Student1 extends Student{
            constructor(name,play){
                super(name);
                this.play = play;
            }
            Playing(){
                console.log(this.name+'喜欢玩耍');
            }
        }
        var zhangsan = new Student('zhangsan');
        var Mary = new Student1('Mary');
Mary.Playing()
Mary喜欢玩耍
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值