JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域

简介: 这篇文章介绍了JavaScript中对象的基本概念和操作,包括对象属性和方法的使用、对象字面量的创建、函数的定义和作用域的概念,以及全局作用域和局部作用域的区别和特性。

文章目录

  • 1、对象的简介
  • 2、对象的基本操作
    • 2.1 代码
    • 2.2 测试结果
  • 3、属性和属性值
    • 3.1 代码
    • 3.2 测试结果
  • 4、对象的方法
    • 4.1 代码
    • 4.2 测试结果
  • 5、对象字面量
    • 5.1 代码
    • 5.2 测试结果
  • 6、函数
    • 6.1 代码
    • 6.2 测试结果
  • 7、全局作用域和局部作用域
    • 7.1 代码
    • 7.2 测试结果

1、对象的简介

在这里插入图片描述

2、对象的基本操作

2.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>对象的基本操作</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*
                  创建对象:

                         使用new关键字调用的函数,是构造函数constructor
                             构造函数是专门用来创建对象的函数

                              使用typeof检查一个对象时,返回的类型是 object

    */

        /*
                   在对象中保存的值称为属性
                      向对象中添加属性:
                                     语法:
                                           对象.属性名 = 属性值

                      读取对象中的属性:
                                     语法:
                                          对象.属性名
                                        如果读取为定义的属性,不会报错,返回undefined

                      修改对象中的属性:
                                     语法: 
                                         对象.属性名 = 新的属性值

                      删除对象中的属性:
                                      语法:
                                          delete 对象.属性名

        */
              var obj = new Object();

              //向obj对象添加一个name属性
              obj.name = "唐僧";

              //向obj对象添加一个gender属性
              obj.gender = "男";

              //向obj对象添加一个age属性
              obj.age = 18;

              console.log(obj);

              console.log(obj.name);
    </script>
</head>

<body>

</body>

</html>

2.2 测试结果

在这里插入图片描述

3、属性和属性值

3.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>属性名和属性值</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*

                       向对象中添加属性 
                            属性名:
                                - 对象的属性名不强制要求遵循标识符的规范

                      如果要使用特殊的属性名,不能采用.的方式操作
                         需要使用另一种方式:
                                    语法: 对象["属性名"] = 属性值
                         读取时也需要采用这种方式

                         使用[]这种形式去操作属性,更加的灵活
                         在[]中可以直接传递一个变量,这样变量值是多少就会去读取那个属性

    */

    /*

                        属性值
                            JS对象的属性值,可以是任意的数据类型



    */

                              var car = new Object();
                              car["kdjak38^%$#"] = "hello";
                              console.log(car["kdjak38^%$#"]);

                              car["123"] = 567;
                              var n = "123";
                              console.log(car[n]);
    </script>
</head>

<body>

</body>

</html>

3.2 测试结果

在这里插入图片描述

4、对象的方法

4.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>方法</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*

                 对象的属性值可以是任意的数据类型,也可以是个函数

    */         
                 var obj = new Object();    
                 obj.username = "小红";
                 obj.age = 18;
                 obj.say = function(){
                     console.log("我是小红的方法")
                 }

                 obj.say();


    </script>
</head>

<body>

</body>

</html>

4.2 测试结果

在这里插入图片描述

5、对象字面量

5.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>对象字面量</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*

                       使用对象字面量,可以在创建对象时,直接指定对象中的属性

                                      语法:{属性名:属性值,属性名:属性值...}

                                      对象字面量的属性名可以加引号也可以不加,建议不加
                                         如果需要使用一些特殊的名字,则必须加引号

                                         属性名和属性值是一组一组的名值对,多个名值对之间使用逗号隔开

    */

                        var car = { 

                            name:"奥迪",
                            color:"黑色"

                        };
                        console.log(car);
    </script>
</head>

<body>

</body>

</html>

5.2 测试结果

在这里插入图片描述

6、函数

6.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>函数</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*

                      函数function
                         - 函数也是一个对象
                         - 函数中可以封装一些功能 (代码),在需要的时候可以执行这些功能(代码)
                         - 函数中可以保存一些代码在需要的时候调用
                         - 使用typeof检查一个函数的时候,返回是function


                    创建一个函数对象:
                            可以将要封装的代码以字符串的形式传递给构造函数


    */
                    //  创建一个函数对象
                    //  可以将要封装的代码以字符串的形式传递给构造函数
                    var fun = new Function("console.log('hello');");

                    //封装到函数中的代码不会立刻执行
                    //函数中的代码会在调用的时候执行
                    //调用函数语法:函数对象()
                    //当调用函数时,函数中封装的代码会按照顺序执行
                    fun();

    /*                

                    使用函数声明来创建一个函数
                                        语法:
                                          function 函数名([形参1,形参2...]){

                                          }
    */       

                                function fun2(){
                                        console.log("我的函数");
                                        alert("hhhh")
                                        document.write("hhhhedu");
                                }

                                //代码执行
                                fun2();

    /*
                                使用函数表达式 来创建一个函数
                                var 函数名  = function([形参1,形参2...]){
                                    语句
                                }

    */                            

    </script>
</head>

<body>

</body>

</html>

6.2 测试结果

在这里插入图片描述

7、全局作用域和局部作用域

7.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>标题</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*
                    作用域
                       - 作用域指一个变量的作用的范围

                       在JS中一共有两种作用域:
                            1、全局作用域:
                                 - 直接编写在script标签中的JS代码,都在全局作用域
                                 - 全局作用域在页面打开时创建,在页面关闭时销毁
                                 - 在全局作用域中有一个全局对象window,
                                   它代表的是一个浏览器的窗口我们可以直接使用
                                 - 在全局作用域中:
                                              创建的变量都会作为window对象的属性保存
                                              创建的函数都会作为window对象的方法保存
                                 - 全局作用域中的变量都是全局变量
                                     再页面的任意的部分都可以访问的到

                            2、函数作用域
                                - 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
                                - 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
                                - 在函数作用域中可以访问到全局作用域的变量,
                                - 在全局作用域中无法访问到函数作用的变量
                                - 当在函数作用域操作一个变量时,首先在自身作用域中寻找,如果有就直接使用
                                       如果没有则向上一级作用域中寻找,直到直到全局作用域中,
                                       如果全局作用域中依然没有找到,则会报错ReferenceError

                                在函数作用域也有声明提前的特性:
                                      使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
                                       函数声明也会在函数中所有的代码执行之前执行



    */
                           function fun(){
                               console.log("我是fun函数");
                           }

                           fun();
                           window.fun();

                           console.log(window)

                /*
                      变量的声明提前
                                 - 使用var关键字声明的变量,会在所有的代码执行之前被声明
                                      但是如果声明变量时不适用var关键字,则变量不会被提前声明

                */
                           console.log("a = "+ a);
                           var a = 123;


                /*
                      函数的声明提前:
                                 - 使用函数声明形式创建的函数functio 函数(){}
                                     它会在所有的代码执行之前就被创建。可以在函数声明前进行调用


                      使用表达式创建的函数不能被提前声明

                      var fun1 = function(){
                              语法                   //不能被提前声明
                      }

                */

                  fun3();
                  function fun3(){
                      console.log("我是fun3()")
                  }



    </script>
</head>

<body>

</body>

</html>

7.2 测试结果

在这里插入图片描述

相关文章
|
1月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
19天前
Next.js 实战 (二):搭建 Layouts 基础排版布局
本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
Next.js 实战 (二):搭建 Layouts 基础排版布局
|
29天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
13天前
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
|
1月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
19 1
JavaScript中对象的数据拷贝
|
14天前
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
|
1月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
29天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
29 2
|
1月前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。