Gramática QML - Objeto (1)

Si ha usado C++ o Java, definitivamente está familiarizado con las clases. No existe la palabra "clase" en ECMAScript, el equivalente es "definición de objeto", pero eso es un bocado, por lo que se elige la palabra "clase".

Los objetos se crean con el operador new más el nombre del tipo a instanciar. Por ejemplo, el siguiente código crea una instancia de la clase Array:

var a = new Array()

Sintácticamente similar a C++. Si el constructor de la clase no tiene parámetros, se pueden omitir los paréntesis; si hay varios parámetros, se deben usar paréntesis. Para evitar confusiones, el autor recomienda usar paréntesis en todas partes.

1. Cuerda

La clase String es una representación de objeto del tipo primitivo String. De hecho, Boolean y Number también tienen representaciones de objetos correspondientes, pero generalmente usamos el valor original directamente, por lo que no lo mencionamos.

Puede construir un objeto String como este:

var str = new String("I\'m a string")

Tanto el método valueOf() como el método toString() del objeto String devuelven el valor original del tipo String.

El tipo String es más complicado y esta sección se centra en sus funciones básicas.

Los beneficios de este artículo, la tarifa para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, el contenido incluye (base del lenguaje C++, introducción a la programación Qt, mecanismo de ranura y señal QT, dibujo de imagen de desarrollo de interfaz QT, red QT, programación de base de datos QT, combate de proyecto QT, QSS, OpenCV, módulo rápido, preguntas de entrevista, etc.) ↓↓↓↓↓↓ Vea a continuación

(1) Longitud de la cadena

La propiedad de longitud devuelve el número de caracteres en la cadena:

var str = new String("I\'m a string")
console.log(str.length)

El ejemplo anterior genera 12. Para valores primitivos del tipo String, la longitud de la cadena también se puede obtener a través de la propiedad length. Por ejemplo: console.log("Soy una cadena". length);.

(2) Acceder a un solo carácter

El método charAt() puede acceder al carácter en la posición de índice especificada. Como se mencionó anteriormente, puede usar el subíndice de la matriz para acceder a los caracteres de la cadena. El método charCodeAt() devuelve el código Unicode correspondiente al carácter en la posición especificada. Aquí hay un ejemplo simple:

var str = new String("I\'m a string")
console.log (str. char At (2)) // 输出:m
console • log (str [0]) // 输出:I
console.log (str.charCodeAt (1)) // 输出:39

(3) Encuentra la subcadena

El método indexOf() recupera la subcadena desde el principio de la cadena, y el método lastlndexOf() recupera la subcadena desde el final de la cadena. Devuelven la posición de la subcadena dada en la cadena representada por este objeto, o -1 si no se encuentra. Ambos métodos también toman un parámetro opcional que especifica dónde empezar a buscar.

El método search() se utiliza para recuperar una subcadena especificada en una cadena o una subcadena que coincida con una expresión regular. Es sensible a mayúsculas y minúsculas. Siempre busca desde el principio de la cadena.

El método match() recupera un valor específico dentro de una cadena o encuentra una o más subcadenas que coinciden con una expresión regular específica. Si se recupera una subcadena coincidente, devolverá una matriz de todas las subcadenas.

Cabe señalar que los cuatro métodos de búsqueda anteriores distinguen entre mayúsculas y minúsculas. Se puede implementar una búsqueda que no distingue entre mayúsculas y minúsculas llamando al método search() o match() con una expresión regular que no distingue entre mayúsculas y minúsculas como argumento.

Aquí hay un ejemplo simple:

var str = new String("I\'m a string")

console.log(str.indexOf("ing")) // 输出:9
console.log(str.search("i")) //输出:9,而非 0
console. log (str.match("tri")) // 输出:[tri]

var numberSource = new String ("2014-08-18, I got 96")
var results = numberSource.match(/\d+/g)
console.log (results.length) // 输出:4
console. log (results) // 输出:[2014,08, 18,96]

(4) Comparación de cadenas

El método localeCompare() utiliza de forma predeterminada la intercalación proporcionada por el sistema operativo subyacente al comparar cadenas. Este método devuelve 0 cuando este objeto es igual a la cadena de parámetros, devuelve un valor menor que 0 cuando es menor que (-1 en QML) y devuelve un valor mayor que 0 cuando es mayor (devuelve 1 en QML).

Fragmento de código de muestra:

var strl = "Qt Quick"
var str2 = "qt quick"
var str3 = "ok"

console.log (strl == str2) // 输出:false
console.log (strl < str2) // 输出:true
console.log (strl.localeCompare(str2)) // 输出:1 
console.log (str3.localeCompare (str2)) // 输出:-1

(5) Cadena de conexión

El método concat() se usa para concatenar dos o más cadenas y devolver un nuevo valor primitivo de cadena. Usar el operador "+" puede concatenar cadenas más convenientemente, y el efecto es el mismo que concat(). Fragmento de código de muestra:

var strl = new String("Qt")
var str2 = "Quick"

var strResult = strl.concat(str2, " is", " great!")
console.log(strResult)
console.log(strl)
console.log(strl.concat (" Widgets"))
console.log(strl + str2)

Tenga en cuenta que ni concat() ni " + " insertarán caracteres de relleno entre cadenas. Si desea concatenar varias cadenas y especificar el separador (carácter de relleno) entre ellas, puede usar el objeto Array para almacenar las cadenas y luego llamar al método join() de Array.

(6) Extraer subcadena

ECMAScript String proporciona dos métodos, slice() y substring(), para extraer subcadenas. Aceptan uno o dos parámetros. El primer parámetro especifica la posición inicial y el segundo parámetro especifica la posición final (la subcadena extraída no contiene el carácter en esta posición). Si se omite el segundo parámetro, la posición final se establece de forma predeterminada en la longitud de la cadena.

Hay otro método, substr(), que también puede extraer subcadenas. Su primer parámetro especifica la posición inicial y el segundo parámetro especifica la cantidad de caracteres que se extraerán. Si no se especifica, substr() devolverá todos los caracteres desde la posición inicial hasta el final de la cadena principal. Fragmento de código de muestra:

var source = new String ("I like QML")
console.log (source.slice (-3)) // 输出:"QML"
console.log (source.slice (2,6)) // 输出:"like"
console.log (source.substring (0, 6)) // 输出:"I like" 
console.log (source.substring (-3) ) // 输出:"I like QML"
console.log (source.substring (4, -3)) // 输出:"I li" 
console.log (source.slice (4, -3)) // 输出:"ke"
console.log (source.substr (2, 4)) // 输出:"like"

(7) Conversión de casos

Si desea convertir una cadena a minúsculas, puede usar el método toLowerCase() o toLocaleLowerCase(): para convertir a mayúsculas, puede usar el método toUpperCase() o toLocaleUpperCase(). Entre ellos, el método toLocaleXXX se implementa en función de una región específica, similar a localeCompare(). Fragmento de código de muestra:

var orig = "Qt Quick"
console.log(orig.toLocaleLowerCase())
console.log(orig.toLowerCase())
console.log(orig.toLocaleUpperCase())
console.log(orig.toUpperCase())

(8) Reemplazo de cuerdas

El método replace) puede reemplazar parte de la subcadena en la cadena principal con la nueva cadena especificada. Su primer parámetro es un valor primitivo de cadena o una expresión regular, y el segundo parámetro es una nueva cadena o una función que produce una nueva cadena.

Usamos expresiones regulares cuando introdujimos la búsqueda de subcadenas y las usaremos nuevamente aquí, pero las expresiones regulares en sí mismas son un tema muy complejo y las cubriremos brevemente más adelante. Fragmento de código de muestra:

var strSource = new String("Android,best")

// 下面语句输出"iOS,best"
console.log(strSource.replace("Android", "iOS"))
// 下面语句输出"Android,worst”
console.log(strSource.replace(/best/, "worst"))

(9) Use arg() para reemplazo de valor

Cuando QML implementó ECMAScript, extendió el objeto String y agregó el método arg(). Si ha usado la clase QString en Qt C++, esto debería resultarle familiar.

La sintaxis de arg(): stringarg(valor). Donde valor puede ser un número, una cadena, un valor booleano, un objeto, etc., y se usa para reemplazar marcadores de posición como %1, °/2 y %N en el objeto de cadena de llamada; el valor booleano se reemplazará con 1 o 0; para un objeto, use el resultado convertido del método toString() para reemplazar el marcador de posición correspondiente. arg() devuelve un nuevo objeto de cadena. Ejemplo sencillo:

var expression = "%1 < %2 = %3"
var result = expression.arg(7).arg(8).arg("true")
console.log(result)
console.log(expression.arg(10).arg(6).arg(false))
console.log("I am %1 years old.".arg(10))

Vale la pena señalar que los objetos del tipo String son de solo lectura. Las operaciones como la extracción, búsqueda y reemplazo de cadenas que implican modificaciones devolverán un nuevo valor u objeto original de la cadena, mientras que la cadena principal no cambiará. Además, el valor primitivo de cadena es un pseudoobjeto, que puede usar todas las propiedades y métodos de la clase String.

2. RegExp

Al escribir programas que procesan cadenas, a menudo existe la necesidad de encontrar cadenas que coincidan con alguna regla compleja. Las expresiones regulares son las herramientas utilizadas para describir estas reglas. En otras palabras, las expresiones regulares son códigos que registran reglas textuales. Hay QRegExp en QtC++ y RegExp en QML, que son herramientas poderosas para la coincidencia de patrones en cadenas.

ECMAScript admite dos formas de construir expresiones regulares:

  • Sintaxis literal: /pattem/atributos.
  • Cree un objeto RegExp: nuevo RegExp (patrón, atributos).

El método de usar literales se usó cuando introdujimos los métodos match() y search() de la clase String anterior. Crear un objeto RegExp es similar al método literal, ambos necesitan establecer el patrón y los atributos.

3. matriz

La matriz definida por ECMAScript es una matriz dinámica cuyo tamaño puede cambiar dinámicamente. Y los elementos de la matriz pueden ser de diferentes tipos. Esto es muy diferente de un lenguaje fuertemente tipado como C++. Echemos un vistazo al uso general de la clase Array.

(1) Crear una matriz

Para definir un objeto Array, hay tres formas:

// 使用默认的构造函数
var a = new Array()

// 指定数组对象的初始长度
var a = new Array(10)

// 用给定的参数初始化数组
var a = new Array(10, 6, 3, 21, 22, 30, 8)

(2) Acceso a la matriz

La propiedad de longitud de la clase Array indica el número de elementos en la matriz. Se puede acceder a los elementos de la matriz por subíndice. Código de ejemplo sencillo:

var a = new Array(10, 6, 3, 21, 22, 30, 8)
console.log("array length - ", a.length)
console.log("2nd element - ", a[1])

(3) Modificar la matriz

Puede usar directamente el operador de subíndice para agregar elementos, simplemente especifique un índice fuera de los límites. Por ejemplo, si la longitud de la matriz es 4, puede usar una instrucción como a[4]=3 para agregar un elemento. También puede usar subíndices para modificar elementos existentes.

  • Se pueden insertar uno o más elementos al final de la matriz mediante el método push(), que devuelve la nueva longitud de la matriz. Puede usar el método Pop() para eliminar y devolver el último elemento de la matriz.
  • El método shift() elimina y devuelve el primer elemento de la matriz. El método unshift() agrega un elemento al comienzo de la matriz y devuelve la nueva longitud de la matriz.
  • El método reverse() invierte el orden de los elementos en la matriz. Tenga en cuenta que cambia la matriz original.
  • El método sort() ordena los elementos de una matriz y devuelve una referencia a la matriz original. Tenga en cuenta que cambia la matriz original.

Fragmento de código de muestra:

var a = new Array(10, 6, 3, 21, 22, 30, "zhangsan")
console.log("array length - ", a.length)
console.log("2nd element - ", a[1])
console.log("7th - ", a[6])

a[6] = "ZhangSanFeng"
a[7] = "XieXun"; a.push(250)
a.unshift(1); console.log(a.join(""))
console.log(a.shift ()); a.reverse ()
console.log(a.pop())
console.log(a.sort ())
console.log(a.pop())
console.log(a.pop())
console.log(a.sort())

/*
输出结果如下:
qml: array length w 7
qml: 2nd element ~ 6
qml: 7th _ zhangsan
qml: 1 10 6 3 21 22 30 ZhangSanFeng XieXun 250
qml: 1
qml: 10
qml: [21, 22, 250, 3, 30, 6, XieXun, ZhangSaiiFeng]
qml: ZhangSanFeng
qml: XieXun
qml: [21, 22, 250,3,30,6]
*/

(4) Convertir a cadena

  • El método join() puede combinar todos los elementos de la matriz en una cadena, y las cadenas se pueden rellenar con un separador determinado.
  • El método toString() puede convertir la matriz en una cadena, que es lo mismo que el método join() sin parámetros.
  • El método toLocaIeString() convierte la matriz en una cadena local.

(5) Separación y fusión de matrices

El método concat() puede concatenar dos o más matrices y su argumento puede ser un valor único o un objeto de matriz. No muta la matriz existente, pero devuelve un nuevo objeto de matriz.

El método slice(start, end) es similar al método slice() de la clase String, coloca los elementos entre el inicio y el final (excluyendo el elemento en la posición final) en la matriz principal en una nueva matriz y regresa. Fragmento de código de muestra:

var array = new Array("I", "like", "Qt", "Quick")
var subArray = array.slice(2, 4)
console.log (subArray.join(" "")
var newArray = array.concat ("!", subArray)
console.log(newArray.join(""))

newArray[0] = "Do you"
newArray.splice (4, 3, "?", "Yes", "!")
console.log(newArray.join(""))

/*
输出结果:
qml: Qt Quick
qml: I like Qt Quick J Q+. Quick
qml: Do you like Qt Quick ? Yes !
*/

(6) Representación literal de arreglos

Además de usar new para crear objetos de matriz, también puede usar literales para representar matrices. Por ejemplo:

var a = [2, 3, 4, "?", "Quick"]
console.log(a.length, a[2])

Como se muestra arriba, la representación literal de una matriz tiene estos puntos clave: los corchetes ([]) definen una matriz, los elementos de la matriz (valores u objetos primitivos) se colocan entre corchetes y los elementos múltiples se separan con comas.

4. Matemáticas

El objeto Math se usa para realizar operaciones matemáticas, es un poco especial, no necesita usar el operador new para construir el objeto, puede usarlo directamente. Fragmento de código usando el objeto Math:

var pi = Math.PI
var textColor = Qt.rgba(Math.random(), Math.random(), Math.random())

Las matemáticas tienen los siguientes métodos:

  • max(x, y), devuelve el máximo de x e y.
  • min(x, y), devuelve el mínimo de x e y.
  • abs(x), devuelve el valor absoluto de un número.
  • sqrt(x), devuelve la raíz cuadrada de un número.
  • pow(x, y), devuelve la subparcela y de x.
  • random(), devuelve un número aleatorio entre 0 y 1.
  • sin(x), devuelve el seno de un número.
  • asin(x), devuelve el arco seno de un número.
  • exp(x), devuelve el exponente de e.
  • log(x), devuelve el logaritmo natural (base e) del número.
  • valueOf(), devuelve el valor original del objeto Math.

El artículo se transfiere desde el blog garden (fengMisaka): [QML Quick Start] QML Grammar - Object (1)

Los beneficios de este artículo, la tarifa para recibir el paquete de materiales de aprendizaje de desarrollo Qt, video técnico, el contenido incluye (base del lenguaje C++, introducción a la programación Qt, mecanismo de ranura y señal QT, dibujo de imagen de desarrollo de interfaz QT, red QT, programación de base de datos QT, combate de proyecto QT, QSS, OpenCV, módulo rápido, preguntas de entrevista, etc.) ↓↓↓↓↓↓ Vea a continuación

Supongo que te gusta

Origin blog.csdn.net/QtCompany/article/details/131925582
Recomendado
Clasificación