【问题标题】:Some questions about JavaScript primitive data type关于 JavaScript 原始数据类型的一些问题
【发布时间】:2019-06-06 00:51:46
【问题描述】:

JavaScript 有 7 种原始数据类型:字符串、数字、布尔值、null、未定义、符号、大整数

我了解三种数据类型,字符串、数字、布尔值;我也明白 bigint 是因为数量不够而引入的。为什么 number 是简单的浮点数的一个例子:

var a = 1.000000000000001;
var b = 1.0000000000000001;
console.log(Number.isInteger(a)) //false
console.log(Number.isInteger(b))  // true

以下是我的问题:

  1. 什么是未定义的?它与c ++中的void相同吗?但 void 是一个关键字。为什么 undefined 是 Javascript 中的原始数据类型?
  2. 为什么要将数据类型设为空?似乎typeof null return 是一个对象。 undefined 和 null 有什么区别? c++中有什么类似的东西?
  3. 什么是符号?我读了这个链接,What is the motivation for bringing Symbols to ES6?,谁能给我一个我们真的需要符号的例子吗?

【问题讨论】:

  • 不要将一种语言的 (javascript) 功能映射到另一种语言的 (C++) 功能。未定义在 c++ 中没有任何对应物。只需以全新的思维学习即可。
  • 1.javascript是解释型语言,不定变量是在其解释中使用时没有声明的变量。
  • 2. javascript是一种对象语言,这意味着每个变量也被视为一个对象,因此被指针引用。如果这个指针为空,则表示没有这个对象的实例
  • @MisterJojo——你的第一条评论没有帮助。 undefined 是一个值,它与未声明的变量无关。您的第二条评论也具有误导性,null 是一个与 undefined 非常相似的值,但允许细微差别,因为它们可以被不同地解释。
  • @Mister Jojo ,所以在编译语言中,编译时会出错,但在解释语言中,它必须使用 undefined?

标签: javascript


【解决方案1】:

基本上,在 javascript 中我们有两类类型:Primitives 和 Objects(函数和数组也是对象。)。 基元按其值复制,对象按其引用复制。

C++ 中的 Undefined 和 void 是不一样的。 Javascript 也有 void 运算符,javascript 中的 void 运算符和 c++ 相同,但是将 javascript 属性与 C++ 进行比较是不合理的。 C++ vs Java 更合理。

null 和 undefined 的区别

1-

let name; 

这是未定义的,我们声明但没有返回任何值。如果未返回值,则函数返回 undefined 我们也可以将其显式设置为 undefined。

let name=null,

当我们想清除变量的值时,我们使用 null。

2-我们可以在 JSON 中使用 null,但我们不能在 JSON 中使用 undefined。

3-undefined 是一个类型,而 null 是一个空对象。为什么null是一个对象,需要ECMA来解决。这是javascript中的一个错误。甚至 javascript 的创建者也承认这是一个错误。

我们使用 SYMBOLS 将对象的属性或方法设为私有。所以我们隐藏了细节,只展示了要点。在javascript中称为抽象。

如何实现:让我们创建一个带有“radius”属性的简单类

class Circle {
    constructor(radius) {
        this.radius = radius; 
    }
    }

符号本质上是一个唯一标识符。每次我们调用这个函数时,我们都会得到一个唯一的标识符。不过,它不是构造函数。

Symbol()===Symbol() //will be false

实施:

const _radius=Symbol()
class Circle {
    constructor(radius) {
    this[_radius] = radius; //since property name starts with _, we use bracket notation
        }
         }

现在测试一下。创建 Circle 的实例:

const c=new Circle;
console.log(Object.getOwnPropertyNames(c))// you will see a number on the console.

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2014-07-19
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多