Análisis de tipos de datos de JavaScript

Análisis de tipos de datos de JavaScript

Recientemente, estaba revisando los conceptos básicos de JS y descubrí que mi comprensión de BigInt y Number no es muy profunda, y mi comprensión de NaN no está en su lugar, por lo que planeo escribir un artículo para explicarlo en detalle.

Artículo de referencia :

Sugerencias : después de estudiar este artículo, tendrá una comprensión amplia de los ocho tipos de datos de JavaScript, adecuados para que los principiantes vean o revisen, no adecuados para una comprensión profunda.

  • Hay dos tipos de datos en JS
    • Tipos de datos básicos : número, cadena, booleano, nulo, indefinido, símbolo (nuevo en ES6), BigInt (nuevo en ES11)
    • Tipo de datos de referencia : objeto (objeto simple, función, fecha, matemática, matriz, etc.)

tipo de datos básicos

característica

  • Un objeto contenedor (Número, Cadena, etc.) que contiene el valor primitivo correspondiente .
  • Segmento de datos simple almacenado en la memoria de pila .
  • Los datos son inmutables, es decir, no se pueden modificar a la fuerza Array.prototype.sort.call('abc')y ​​la modificación informará de un error.
  • No hay ninguna _proto_propiedad .

juicio

  • Puede utilizar typeofpara determinar el tipo de datos.
  • Cabe señalar aquí que typeof(null) == 'object' el tipo de nulo se juzgará erróneamente como object .
    • nullLa obtención de errores de detección es un problema que quedó en la historia. En JSla versión inicial de , se utilizó un sistema de 32 bits. Por consideraciones de rendimiento, se utilizó la información de tipo de variables de almacenamiento de bajo orden. 000El comienzo representaba un objeto pero nullrepresentaba todos los ceros. , por lo que se calculó erróneamente como object.
tipo resultado
Cadena "cadena"
Número "número"
booleano "booleano"
Indefinido "indefinido"
Objeto, Matriz, RegExp, nulo, Fecha, Error "objeto"
Función "función"
Símbolo (nuevo en ES6) "símbolo"
BigInt (nuevo en ES11) "Empezando"

Número

  • El número se puede definir directamente usando números o notación científica.
  • La clase de datos básica Número en JavaScript es un número de coma flotante de precisión doble. El rango seguro máximo que puede representar es más o menos 9007199254740991, es decir, 2 elevado a la 53 potencia menos 1, y todos los números mayores que 2 elevado a la 53 El poder se puede expresar BigInt.
let x1 = 34.00
let x2 = 34
let x3 = 123e5
let x4 = 123e-5
let x5 = new Number(123)

Yaya

  • Aquí hay un punto de atención typeof NaNpara Number.
  • La propiedad NaN es un valor especial que representa un valor no numérico. Este atributo se utiliza para indicar que un valor no es un número. Un objeto Número se puede establecer en este valor para indicar que no es un valor numérico.
  • isNaN() función global para determinar si un valor es un valor NaN.
typeof NaN === "number" // true
// NaN 同任何数比较均为false
NaN === NaN // false

isNaN("0")  // false
isNaN("ssss")  // true

Empezando

  • Un Bigint se puede definir agregando un literal entero no llamando a una función BigInt()sin newoperadores, que no se puede inicializar con newla palabra clave .
  • BigIntes un nuevo tipo primitivo en JavaScript que puede representar números enteros con precisión arbitraria . Con , los enteros grandes se pueden almacenar y manipular de forma segura, BigIntincluso si superan los límites de enteros seguros de JavaScript .Number
  • Añadido en ES11.
let x1 = 123n
let x2 = BigInt(123)
  • BigInt es diferente de Número.
    • No se puede utilizar para Mathmétodos en objetos.
    • No se puede mezclar con ninguna Numberinstancia, ambas deben convertirse al mismo tipo. Tenga cuidado al convertir los dos tipos de un lado a otro, ya que las variables pueden perder precisión cuando BigIntse convierten en variables.Number

Cadena

  • Una cadena se puede definir directamente usando una cadena.
  • Además de nulo, indefinido, otros pueden toStringobtener el valor de su cadena correspondiente a través del método.
let s1 = "qwe"
let s2 = new String("sad")
let s3 = 'sdg'
let s4 = `dbs`

({
    
    }).toString() // [object Object]
(123).toString() // "123"

// 字符串与其他类型相加会发生奇怪的事情
{
    
    } + '' //  0
[] + '' // ''

booleano

  • verdadero y falso son booleanos.

  • Solo los siguientes siete valores son falsos en JS .

    • indefinido
    • nulo
    • FALSO
    • Yaya
    • ''
    • 0
    • -0
  • Todo lo demás es cierto .

Boolean(null) // false
Boolean(undefined) // false
Boolean(4) // false

Nulo

  • null es el tipo de datos nulo.
  • Su expresión es nula. A menudo se utiliza para liberar memoria o inicializar tareas. Es igual a indefinido, pero no estrictamente igual a indefinido.
let a = null

undefined == null // true
undefined === null // false

Indefinido

  • undefined es el tipo de datos Undefined.
  • Su significado es indefinido, o definido sin asignar. Es igual a nulo, pero no estrictamente igual a nulo.
let a = undefined

null == undefined // true
null === undefined // false

Símbolo

Los nombres de las propiedades de los objetos de ES5 son todas cadenas, lo que puede causar fácilmente conflictos de nombres de propiedades. Por ejemplo, si usa un objeto proporcionado por otros, pero desea agregar un nuevo método (modo mixin) a este objeto, el nombre del nuevo método puede entrar en conflicto con el método existente. Sería genial si hubiera un mecanismo para garantizar que el nombre de cada atributo sea único, para evitar fundamentalmente conflictos de nombres de atributos. Es Symbolpor eso que ES6 lo presentó.

  • Symbol, que representa un valor único.
  • Los valores de los símbolos son Symbol()generados por funciones.
  • Hay dos tipos de nombres de atributo de objeto, uno es la cadena original y el otro es el tipo de símbolo recién agregado. Todos los nombres de atributos que pertenecen al tipo Símbolo son únicos y se puede garantizar que no entren en conflicto con otros nombres de atributos.
let s = Symbol();

typeof s
// "symbol"

let s1 = Symbol('foo');
let s2 = Symbol('bar');

s1 // Symbol(foo)
s2 // Symbol(bar)

s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

tipo de datos de referencia

característica

  • Se asignan dos espacios cuando se crea un tipo de referencia
    • Una pieza está en el montón , almacenando los datos del tipo de referencia en sí (por supuesto, la cantidad de datos será relativamente grande)
    • Una pieza está en la pila , almacenando referencias a datos en el montón (almacenando direcciones de memoria en el montón, es decir, punteros)
  • Los tipos de referencia son mutables: es decirlet a={}; a.x=1;
  • functionLos parámetros se pasan por valor, las referencias no se pueden modificar

juicio

  • Pase la Object.prototype.toString.calldetección
let a = function (){
    
    }
let b = []
let c = {
    
    }

Object.prototype.toString.call(a) // [object Function]
Object.prototype.toString.call(b) // [object Array]
Object.prototype.toString.call(c) // [object Object]

typeof a // function
typeof b // object
typeof c // object

Objeto

  • JS todo es un objeto
  • JavaScript proporciona varios objetos integrados como String, Date, Array, etc. Los objetos son solo tipos de datos especiales con propiedades y métodos.
    • Boolean puede ser un objeto.
    • Un tipo numérico puede ser un objeto.
    • Una cadena también puede ser un objeto.
    • la fecha es un objeto
    • Las matemáticas y las expresiones regulares también son objetos.
    • matriz es un objeto
    • Incluso las funciones pueden ser objetos.
let x1 = {
    
    }
let x2 = new Object()
// 基本类型的包装类 使用typeof判为object
let x3 = new String()
let x4 = new Number()

typeof x1 // "object"
typeof x2 // "object"
typeof x3 // "object"
typeof x4 // "object"

Función

  • Una función es un tipo especial de objeto.
  • Una función también es un bloque de código funcional, una secuencia de comandos con un intervalo cerrado corto.Si la misma pieza de código se usa varias veces, se puede encapsular en una función, lo que permite que se use según sea necesario en el código.
  • Encapsulación de números para evitar escribir repetidamente una gran cantidad del mismo contenido, pero el poder real de la función radica en la capacidad de pasar parámetros, puede pasarles diferentes datos y usar estos datos para completar la operación predeterminada
  • Las funciones son ciudadanos, objetos y valores de primera clase que se pueden almacenar en una variable, matriz u objeto
  • Las funciones se pueden pasar a funciones y ser devueltas por funciones, y las funciones tienen propiedades
  • Una función siempre tiene un valor de retorno (en otras palabras, hay una declaración de retorno, a excepción de la función constructora, porque devolverá la llamada a la función constructora de forma predeterminada, y cuando se ejecute la llamada al constructor, devolverá la pantalla)
var funA = function(){
    
    
    console.log("我是匿名函数保存在变量funA中");
}
var funB = [function(){
    
    
    console.log("我是匿名函数保存在数组funB中");
}]
var funC = {
    
    
     method:function(){
    
    
        console.log("我是匿名函数保存在对象funC中");
    }
}
// 函数的调用
funA();     // 普通函数的调用
funB[0]();  // 函数存入数组中的调用
funC.method(); // 对象调用方法的使用

⭐Lo anterior es todo el contenido de este artículo, si te es útil, por favor regálame un me gusta

Supongo que te gusta

Origin blog.csdn.net/lonelysnowman/article/details/128699253
Recomendado
Clasificación