Literal constructor | Qt Qml | Qt 6.11.2
Description: [literal-constructor] Do not use function as a constructor.

- Qt 6.11
- Qt Qml
- Qt Qml Tooling
- qmllint
- QML Lint Warning and Errors
- Literal constructor
- Qt 6.11.2 Reference Documentation

Invalid qmllint directives ◦ Missing enum entry

# Literal constructor

This warning category is spelled `[literal-constructors]` by qmllint.

## Do not use function as a constructor

### What happened?

A literal construction function was used as a constructor.

### Why is that bad?

Calling a literal construction function such as `Number` as a regular function coerces the passed value to a primitive number. However, calling `Number` as a constructor returns an object deriving from `Number` containing that value. This is wasteful and likely not the expected outcome. Moreover, it may lead to unexpected or confusing behavior because of the returned value not being primitive.

### Example

     import QtQuick

     Item {
         function numberify(x) {
             return new Number(x)
         }
         Component.onCompleted: {
             let n = numberify("1")
             console.log(typeof n)   // object
             console.log(n === 1)    // false

             if (new Boolean(false)) // All objects are truthy!
                 console.log("aaa")  // aa
         }
     }

To fix this warning, do not call these functions as constructors but as regular functions:

     import QtQuick

     Item {
         function numberify(x) {
             return Number(x)
         }
         Component.onCompleted: {
             let n = numberify("1")
             console.log(typeof n)   // number
             console.log(n === 1)    // true

             if (Boolean(false))
                 console.log("aaa")  // <not executed>
         }
     }

Invalid qmllint directives ◦ Missing enum entry