码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • javascript中的严格模式(use strict)


    下面是一个使用JavaScript严格模式的代码示例。在这个示例中,我将展示如何在整个脚本中启用严格模式,并演示一些严格模式下可能遇到的问题。

    1. "use strict";
    2. a = 1; // Uncaught ReferenceError: a is not defined
    3. // 尝试使用一个未声明的变量
    4. // 在严格模式下,这将抛出一个 ReferenceError
    5. // var undeclaredVariable;
    6. console.log(undeclaredVariable); // ReferenceError: undeclaredVariable is not defined
    7. // 尝试删除一个变量
    8. var declaredVariable = "Hello, World!";
    9. delete declaredVariable; // SyntaxError: Identifier 'declaredVariable' can't be deleted
    10. console.log(declaredVariable); // "Hello, World!"
    11. // 尝试使用八进制字面量
    12. var octalLiteral = 010; // SyntaxError: Octal literals are not allowed in strict mode.
    13. // 尝试修改 this 的值
    14. function exampleFunction() {
    15. return this;
    16. }
    17. var obj = { prop: 42 };
    18. var func = exampleFunction.bind(obj);
    19. func.this = "newThis"; // TypeError: Cannot assign to read only property 'this' of function
    20. // 尝试使用 with 语句
    21. // 在严格模式下,with 语句是不允许的
    22. // with (Math){x = cos(2)};
    23. // 尝试使用 eval 或 arguments 作为变量名
    24. // 在严格模式下,这将抛出 SyntaxError
    25. // var eval = 1;
    26. // var arguments = 2;
    27. // 尝试使用函数的 caller 或 callee 属性
    28. function showCaller() {
    29. console.log(showCaller.caller); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
    30. }
    31. showCaller();
    32. // 严格模式下的函数参数变化
    33. function strictFunction(a, b) {
    34. "use strict";
    35. a = 42;
    36. var b = "Hello";
    37. console.log(arguments[0]); // 仍然输出原始值,不会受到函数内部 a变量变化的影响
    38. }
    39. strictFunction(10, "World"); // 输出 10
    40. // 严格模式下的其他正常代码
    41. function safeFunction() {
    42. "use strict";
    43. var safeVariable = "Safe to use";
    44. console.log(safeVariable);
    45. }
    46. 当然,关于JavaScript严格模式,还有很多细节和用法可以探讨。下面我将继续提供一些关于严格模式的示例和说明。
    47. 严格模式下的函数参数和arguments对象
    48. 在严格模式下,函数内的参数改变不会影响到arguments对象,反之亦然。这是为了避免一些混淆和潜在的错误。
    49. javascript
    50. "use strict";
    51. function exampleFunction(value) {
    52. value = "new value";
    53. console.log(arguments[0]); // 输出 "original value",因为在严格模式下,value的改变不会影响arguments[0]
    54. arguments[0] = "changed value";
    55. console.log(value); // 输出 "new value",因为arguments[0]的改变不会影响value
    56. }
    57. exampleFunction("original value");
    58. 严格模式下的只读属性
    59. 在严格模式下,尝试为只读属性赋值会抛出错误。
    60. javascript
    61. "use strict";
    62. var obj = Object.freeze({
    63. property: "Hello"
    64. });
    65. obj.property = "World"; // TypeError: Cannot assign to read only property 'property' of object '#'
    66. 严格模式下的eval使用
    67. 在严格模式下,eval内的变量和函数声明不会创建全局变量,也不会修改外部作用域。
    68. javascript
    69. "use strict";
    70. eval("var test = 42;");
    71. console.log(test); // ReferenceError: test is not defined
    72. function outerFunction() {
    73. var outerVariable = "outer";
    74. eval("var innerVariable = 'inner';");
    75. console.log(innerVariable); // 输出 "inner",但是不会影响到外部作用域
    76. }
    77. outerFunction();
    78. console.log(innerVariable); // ReferenceError: innerVariable is not defined
    79. 严格模式下的this值
    80. 在严格模式下,全局作用域下的this值为undefined,而不是全局对象(在浏览器中通常是window)。
    81. javascript
    82. "use strict";
    83. console.log(this === undefined); // 输出 true
    84. 在函数内部,this的值不会因为外部函数的调用方式而随意改变(比如通过call、apply或bind方法)。
    85. javascript
    86. "use strict";
    87. function exampleFunction() {
    88. return this;
    89. }
    90. var obj = { value: 42 };
    91. var func = exampleFunction.bind(obj);
    92. console.log(func()); // 输出 obj 对象
    93. 严格模式下的重复属性名
    94. 在严格模式下,对象字面量中不能包含两个相同的属性名。
    95. javascript
    96. "use strict";
    97. var obj = {
    98. prop1: "value1",
    99. prop1: "value2" // SyntaxError: Duplicate data property in object literal not allowed in strict mode
    100. };
    101. 这些示例进一步展示了严格模式如何改变JavaScript的行为,帮助开发者编写更安全、更可靠的代码。在编写JavaScript代码时,推荐始终启用严格模式,并遵循其规则,以确保代码质量和减少潜在的错误。
    102. safeFunction(); // 输出 "Safe to use"
    103. 在这个示例中,我注释掉了那些会在严格模式下导致错误的代码,并在其下方提供了相应的错误信息。同时,我也展示了一些在严格模式下仍然可以安全使用的代码。

      请注意,在真实项目中,通常你会想要避免在严格模式下使用被禁止的特性,并且确保你的代码遵循严格模式的规则,以便能够捕获潜在的错误并写出更健壮的代码。在编写新的JavaScript代码时,启用严格模式是一个很好的实践。

    104. 相关阅读:
      哪款取暖器省电效果好 家用哪个取暖好最实用
      【数据结构】——单链表
      【区块链 | DAPP】React版Dapp开发模板(连接钱包、合约调用全流程和一个批量转账工具实战)
      C++基于Qt中QOpenGLWidget模块实现的画图板源码+可执行文件
      [附源码]JAVA毕业设计计算机专业在线学习评估软件-演示录像-(系统+LW)
      无向图欧拉路径问题
      图论第一天|深度优先搜索理论基础、广度优先搜索理论基础、797.所有可能的路径
      乐观锁和悲观锁
      2023年Q3季度国内手机大盘销额下滑2%,TOP品牌销售数据分析
      Github 2024-04-22 开源项目日报Top10
    105. 原文地址:https://blog.csdn.net/m0_72603435/article/details/136586980
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号