首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript:z = z || []不使用VAR时会抛出错误 - 为什么?

在JavaScript中,使用关键字var声明变量是一种良好的编程实践,它用于定义一个局部作用域的变量。如果在声明变量时没有使用var关键字,JavaScript会将该变量视为全局变量,即使在声明之前没有给它赋值。这可能会导致一些问题,例如命名冲突、意外的变量修改等。

在给定的代码中,z = z || []是一种常见的用法,用于在变量z未定义或为假值(如nullundefinedfalse等)时,将其赋值为一个空数组。这种用法可以确保z始终是一个数组,而不会出现zundefined或其他非数组值的情况。

如果在这段代码中不使用var关键字,即z = z || [],而是直接使用z = z || [],会抛出错误。这是因为在JavaScript中,如果变量未经声明就被赋值,它会被视为全局变量。在严格模式下,这种行为会导致ReferenceError错误,因为在赋值之前,变量z并未声明。在非严格模式下,这种行为会创建一个全局变量z,并将其赋值为一个空数组。

综上所述,使用var关键字声明变量是一种良好的编程实践,可以避免潜在的问题和错误。在给定的代码中,如果不使用var关键字,会抛出错误,因为变量z未经声明就被赋值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS 声明

var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,也可以是声明在任何函数外的变量。如果你重新声明一个 JavaScript 变量,它将不会丢失其值。...function x() { y = 1; // 在严格模式(strict mode)下会抛出 ReferenceError 异常 var z = 2; } x(); console.log...(y); // 打印 "1" console.log(z); // 抛出 ReferenceError: z 未在 x 外部声明 声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建...y = 4; // 已存在的外部函数的y变量被赋值为4,生成新的全局变量。 z = 5; // 创建新的全局变量z,并且给z赋值为5。...} // (在严格模式下(strict mode)抛出ReferenceError) b(); // 调用b时创建了全局变量z

2.5K10

JavaScript深入浅出补充——(二)语句和严格模式,对象

function 构造器的方式来创建函数对象 for …in语句 这里我们可以用for  in去遍历obj中的属性  switch语句 如下三种方法 循环语句 with语句 可以修改当前的作用域 如下,在js中已经建议使用...with了,因为在with中作用域会比较复杂  严格模式 严格模式是一种特殊的执行模式,他修复了部分语言上的不足,提供更强的错误检查,并增强安全性 可以向上兼容,如果老的浏览器兼容,会被当做一个字符串忽略...需要注意的是并不一定是第一行的代码,再他前面可以用引号引起来abc这样,但不能用var 在前面 严格模式下的主要不同: 在严格模式下使用with或报错,SyntaxError语法错误 没有声明的变量被赋值会被报错...underfined的属性z,返过来去赋值 巧用运算符实现链式读取 定义变量yz,想去对obj.y去操作的时候,obj不为空,但是想要检测y属性是否有的时候,有时会用if,把y.z取出来做一些处理 巧用运算符...是不允许被删除的,会返回false 我们可以尝试传入,要查看的对象Object,要查看的属性prototype 下面的意思是否可配置  , 如果用var定义的变量或者局部变量仍然不可以被删除 函数声明也是同理

82940
  • 【JS】246-如何在JavaScript面试中过五关斩六将?

    为什么会这样?出现这种情况是因为 JavaScript 不能继承父类的方法。如何解决这个问题呢?...在这种情况下,null 的[“posts”]将会抛出一个错误。正确的处理方法应该是这样!...Nicholas 认为,当感觉会发生意料之外的事情时,就要手动抛出错误。还需区分致命错误和非致命错误。上面的错误与后端服务器宕机有关,属于致命错误。这种情况下,应该告知顾客由于某种原因服务暂停了。...为构建这样的代码,首先要抛出一个错误,用 window 对象层级的错误事件捕捉它,然后调用 API 将该信息打出到服务器。...这种提升会导致许多JavaScript 场景,一些代码会在某些地方抛出错误,另一些则不知不觉引用了 undefined。你需要了解提升以消除这些模糊场景。 事件冒泡 现在来看看事件冒泡!

    1.3K30

    Web 前端开发代码规范

    // 推荐 var is_my_object = {}; var is-my-object = {}; // 推荐 var isMyObject = {}; 2、构造函数或类时使用驼峰式大写 //...j = 0; …… } }); 严格模式的一大目标是显性的抛出错误,让你能更方便更快的调试一些隐性的错误。...非严格模式下,为一个未申明的局部变量赋值时会自动创建一个同名的全局变量,这是Js程序中最容易出现的错误之一,在严格模式下这么做会显性的抛出异常。...严格模式在这种情况下会显性的抛出错误 // 重复的变量名,在严格模式下会报错。...var object = { foo: 'bar', foo: 'baz' }; 4、对只读属性修改/删除时会抛出异常。 ES5中可为对象特定属性设为只读或让整个对象不可修改。

    3.2K10

    JavaScriptJavaScript开篇基础(2)

    外部作用域:如果在当前作用域中找不到该变量,JavaScript 会查找外部作用域,直到找到该变量或达到全局作用域。 全局作用域:如果全局作用域中仍然找不到该变量,则会抛出错误。...中,变量的声明有几种方式,分别是使用 var、let 和 const,它们在作用域、可变性等方面有不同的行为。...下面是它们的详细说明: var 声明 varJavaScript 中最早的变量声明方式,它有以下特点: 作用域:var 声明的变量具有函数作用域,而不是块作用域。...这意味着可以在变量声明之前使用它们,但使用的变量的值会是 undefined(对于 var 声明)或抛出 ReferenceError(对于 let 和 const 声明)。...之所以这样会有区别:这是因为var 变量会被提升到作用域的顶部,并且在提升时会初始化为undefined ,let 和 const 变量虽然也会被提升,但它们在提升时并不会初始化为undefined。

    9810

    Generator函数

    为什么会有这个匹配呢?因为第一个 next()总是启动一个生成器,并运行到第一个 yield处。...Generator.prototype.throw() Generator 函数返回的迭代器对象,都有一个throw方法,可以在函数体外抛出错误,然后在 Generator 函数体内捕获。...所以 for...of 循环中包含 4; Generator为什么是异步编程解决方案 同步和异步 异步:一个任务不是连续完成的,可以理解为,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段...这主要是为了能够捕捉抛出错误。...函数体内外的数据交换(next返回值的value,是向外输出数据,next方法的参数,是向内输入数据)和错误处理机制(Generator 函数内部可以部署错误处理代码,捕获函数体外抛出错误)是它可以成为异步编程的完整解决方案

    1K30

    GOGO-前端开发规范

    // 推荐var is_my_object = {};var is-my-object = {};// 推荐var isMyObject = {};复制2、构造函数或类时使用驼峰式大写// 推荐var...j = 0; …… }});复制严格模式的一大目标是显性的抛出错误,让你能更方便更快的调试一些隐性的错误。...非严格模式下,为一个未申明的局部变量赋值时会自动创建一个同名的全局变量,这是Js程序中最容易出现的错误之一,在严格模式下这么做会显性的抛出异常。...严格模式在这种情况下会显性的抛出错误// 重复的变量名,在严格模式下会报错。...var object = { foo: 'bar', foo: 'baz'};复制4、对只读属性修改/删除时会抛出异常。ES5中可为对象特定属性设为只读或让整个对象不可修改。

    23320

    Web前端开发代码规范(基础)

    // 推荐 var is_my_object = {}; var is-my-object = {}; // 推荐 var isMyObject = {}; 2、构造函数或类时使用驼峰式大写 //... j = 0;         ……     } }); 严格模式的一大目标是显性的抛出错误,让你能更方便更快的调试一些隐性的错误。...非严格模式下,为一个未申明的局部变量赋值时会自动创建一个同名的全局变量,这是Js程序中最容易出现的错误之一,在严格模式下这么做会显性的抛出异常。...严格模式在这种情况下会显性的抛出错误 // 重复的变量名,在严格模式下会报错。...var object = {     foo: 'bar',     foo: 'baz' }; 4、对只读属性修改/删除时会抛出异常。 ES5中可为对象特定属性设为只读或让整个对象不可修改。

    1.8K21

    详解作用域链

    (sum);//error 编写代码时,声明而直接初始化变量是一个常见的错误做法,因为这样可能会导致错误。...getName()时会引用变量name。...对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出错误对象的声明。下面看一个例子。 function buildUrl() { var qs = "?...let、const不会产生变量提升 function、var在同一作用域重复声明变量,后者会覆盖前者(前者与后者的关系要看编译环节过后的代码);而let、const 会直接抛出语法错误 const 声明变量的同时需要赋值...,否则抛出语法错误,且变量的指向不能变(但是变量指向的内容可以变) 本文总结 在上述文章中,我们仔细讲解了作用域链的相关知识,小伙伴们学会了吗?

    55730

    JavaScript笔记(二)

    throw 抛出(生成)错误 。 try 实现错误处理,与 catch 一同使用var 声明一个变量。 while 当条件语句为 true 时,执行语句块。...变量 变量必须以字母开头 变量也能以 $ 和 _ 符号开头(推荐) 变量名称对大小写敏感(y 和 Y 是不同的变量) var name; //用 var 关键词来声明变量,变量声明之后...="male"; //多个变量用逗号分隔 var x,y,z=1; //多个不可以用一条语句赋同一个值,x,y 为 undefined, z 为 1。...可以通过科学(指数)计数法来书写 var x1=34.00; //使用小数点来写 var x2=34; //不使用小数点来写 var y=123e5; // 12300000 var...rHTML=myFunction(4,3); //返回12 ### 局部 JavaScript 变量 函数内部声明的变量(使用 var)是*局部*变量,所以只能在函数内部访问它。

    1.3K10

    JavaScript笔记总结(二)

    JavaScript 语句标识符 JavaScript 语句通常以一个 语句标识符 为开始,并执行该语句。 语句标识符是保留关键字不能作为变量名使用。...throw 抛出(生成)错误 。 try 实现错误处理,与 catch 一同使用var 声明一个变量。 while 当条件语句为 true 时,执行语句块。...变量 变量必须以字母开头 变量也能以 $ 和 _ 符号开头(推荐) 变量名称对大小写敏感(y 和 Y 是不同的变量) var name; //用 var 关键词来声明变量,变量声明之后...="male"; //多个变量用逗号分隔 var x,y,z=1; //多个不可以用一条语句赋同一个值,x,y 为 undefined, z 为 1。...可以通过科学(指数)计数法来书写 var x1=34.00; //使用小数点来写 var x2=34; //不使用小数点来写 var y=123e5; // 12300000 var

    98332

    【前端基础】JS基础学习笔记整理

    使用库函数 把一些 JavaScript代码(尤其是用户自己编写的对象的类文件)组织成可以反复使用的库,具有下列好处: ◆ 减少错误...JS中 常见的 陷阱 转 区分大小写:变量名、属性和方法全部都区分大小写 匹配的引号、圆括号或花括号将抛出错误 条件语句:3个常见陷阱 换行:一直用分号结束语句来避免常见的换行问题 标点法:在对象声明的尾部逗号将导致出错...if(var1 == var2){//statement} 不要犯无意地使用赋值运算符的错误:把第二个参数的值赋给第一个参数。因为它是一个逻辑问题,它将一直返回true且不会报错。...直接表示以其为id值的DOM节点, //所以赋值时会出错,当有var声明时,IE会把其当着变量,这个时候就正常了。...‘this’ 另一个常见的错误是忘记使用“this”。在JavaScript对象中定义的函数访问这个对象的属性,但没有使用引用标识符“this”。

    2.3K70

    Javascript 面试的完美指南(开发者视角)

    在这种情况下,null["posts"] 将抛出一个错误。...Nicholas 说,当你觉得有什么意想不到的事情将要发生时,手动抛出错误。区分致命错误和非致命错误。以上错误与后端服务器宕机有关,这是致命的。在那里,应该通知客户由于某种原因服务中断了。...为了创建这样的代码,首先抛出一个错误,, 从 window 层级捕捉错误事件,然后调用API将该消息记录到服务器。...later 当在 Python 这样的脚本语言中执行上述操作时,它会抛出一个错误,因为需要先定义然后才能使用它。...这种提升可能导致许多JavaScript 在某些地方抛出错误,和另外地方使用 undefined 。 学习一些 例子 来搞清楚提升。 事件冒泡 现在事件开始冒泡了!

    1.3K50

    Node.js 的错误处理机制

    ERROR简介 Node.js 的错误分为四类: 标准 JavaScript 错误,如 EvalError,SynctaxError,RangeError,ReferenceError,TypeError...,URIError 系统错误,如通过程序我们想打开一个文件,但是系统中不存在这个文件,就会抛出系统错误 通过程序代码 throw() 抛出错误 断言错误,通过模块 assert 抛出错误 同步API...如果想捕获错误,可以使用 process.on('uncaughtException') (或者 Domain 模块来处理,但 Domain 模块已被新版本弃用,这里只是提一嘴,推荐使用)方法来处理,...fs'); try { const m = 1; const n = m + z; // javaScript 错误 fs.readFileSync('....process.on('uncaughtException') 来捕获 CLASS Error Node.js 的错误机制不会解释为什么会发生错误,它只会通过追踪栈信息来尽可能的描述该错误 new Error

    2K40

    一篇文章带你了解JavaScript错误处理

    执行JavaScript代码时,可能会发生意想不到的错误错误可以是程序员编写的编码错误,由于输入错误引起的错误以及其他不可预见的事情。 因此,为了处理错误JavaScript提供了4个关键字。...三、JavaScript 错误对象 JavaScript具有一个内置的Error对象,该对象在发生错误时提供错误信息。 四、错误类型 1....EvalError 当通过eval()函数执行代码期间发生错误时,将抛出一个EvalError。但是,JavaScript不再抛出错误,但是仍然保留此对象是为了向后兼容。...较新版本的JavaScript不会抛出异常EvalError,使用SyntaxError代替。 2. RangeError 当使用超出允许值范围的数字时,将引发RangeError。...try { var x = 5 + y; // 抛出引用错误 } catch(err) { document.getElementById("result").innerHTML = err.name

    91630

    学会使用函数式编程的程序员(第1部分)

    下面是Javascript中的一个纯函数示例: var z = 10; function add(x, y) { return x + y; } 注意,add 函数涉及z变量。...考虑一下这个函数: function addNoReturn(x, y) { var z = x + y } 注意这个函数是返回任何值。它只是把变量x和y相加赋给变量z,但并没有返回。...所以,当你有一个错误,因为一个变量在错误的时间被更改为错误的值,这不是很好。 此时,你可能会想,“我怎么可能只使用纯函数呢?” 函数式编程不能消除副作用,只能限制副作用。...相反,它使用从旧值计算的新值。 不幸的是,这在 Javascript中 很难想懂,需要你花点时间研究它,原因有二。...即使Javascript不是纯函数语言,也可以使用它进行一些功能性的操作。

    68030
    领券