json取不到值报错undefined_js值和类型

JavaScript中的变量没有固定类型,值本身才有类型。变量可以在不同类型的值之间自由转换,例如从数字到字符串。typeof运算符返回变量所持值的类型,而非变量自身类型。对于未声明或未赋值的变量,typeof返回'undefined',即使对undeclared变量使用typeof也不会抛出错误,这在错误处理中显得特殊。理解这些特性对于JavaScript编程至关重要。
摘要由CSDN通过智能技术生成

值和类型

JavaScript 中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。

换个角度来理解就是,JavaScript 不做“类型强制”;也就是说,语言引擎不要求变量总是 持有与其初始值同类型的值。一个变量可以现在被赋值为字符串类型值,随后又被赋值为 数字类型值。

42 的类型为 number,并且无法更改。而 "42" 的类型为 string。数字 42 可以通过强制类型 转换(coercion)为字符串 "42"

在对变量执行 typeof 操作时,得到的结果并不是该变量的类型,而是该变量持有的值的类 型,因为 JavaScript 中的变量没有类型。

var a = 42; typeof a; // "number"

a = true; typeof a; // "boolean"

typeof 运算符总是会返回一个字符串:

typeof typeof 42; // "string"

typeof 42 首先返回字符串 "number",然后 typeof "number" 返回 "string"。

undefined 和 undeclared

变量在未持有值的时候为 undefined。此时 typeof 返回 "undefined":

cbfe980bcc64cfbf4ed97209e30ce907.png

大多数开发者倾向于将 undefined 等同于 undeclared(未声明),但在 JavaScript 中它们完全 是两回事。

已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明 过的变量,是 undeclared 的。

例如:

var a; a; // undefined

b; // ReferenceError: b is not defined

浏览器对这类情况的处理很让人抓狂。上例中,“b is not defined”容易让人误以为是“b is undefined”。这里再强调一遍,“undefined”和“is not defined”是两码事。此时如果浏览器 报错成“b is not found”或者“b is not declared”会更准确。

更让人抓狂的是 typeof 处理 undeclared 变量的方式。例如: var a; typeof a; // "undefined" typeof b; // "undefined"

对于 undeclared(或者 not defined)变量,typeof 照样返回 "undefined"。请注意虽然 b 是 一个 undeclared 变量,但 typeof b 并没有报错。这是因为 typeof 有一个特殊的安全防范 机制。

此时 typeof 如果能返回 undeclared(而非 undefined)的话,情况会好很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值