Kemahiran JavaScript: membuka kotak dan penukaran jenis

WBOY
Lepaskan: 2022-03-02 18:18:40
ke hadapan
1738 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang javascript, yang terutamanya memperkenalkan isu yang berkaitan dengan penukaran kotak dan jenis Tinju merujuk kepada menukar jenis data asas kepada yang sepadan Mari kita lihat operasi jenis rujukan I semoga ianya bermanfaat kepada semua.

Kemahiran JavaScript: membuka kotak dan penukaran jenis

Pengesyoran berkaitan: Tutorial javascript

Jenis data asas: string, number, boolean

Jenis rujukan: object, function

Jenis tidak wujud: undefined

String, Number, Boolean Ia adalah jenis pembungkus yang dimiliki oleh tiga jenis primitif: masing-masing string, number dan boolean dan objeknya ialah jenis rujukan.

Tinju

Tinju merujuk kepada operasi menukar jenis data asas kepada jenis rujukan yang sepadan Proses ini terutamanya merujuk kepada string, number, boolean Jenis data ialah. dibungkus ke dalam data jenis rujukan melalui String, Number dan Boolean.

// 隐式装箱var s1 = 'Hello World'; 
var s2 = s1.substring(2);
Salin selepas log masuk

Langkah pelaksanaan baris kedua kod di atas sebenarnya adalah seperti berikut:

  1. Gunakan new String('Hello World') untuk mencipta objek contoh sementara;
  2. Gunakan objek sementara untuk memanggil kaedah substring;
  3. tetapkan hasil pelaksanaan kepada s2;

Langkah di atas ditukarkan kepada kod, seperti berikut:

// 显式装箱var s1 = 'Hello World'; 
var tempObj = new String('Hello World');
var s2 = tempObj.substring(2);
Salin selepas log masuk

Nyah kotak

Nyah kotak adalah untuk menukar jenis rujukan kepada jenis data asas.

Mengenai ToPrimitive

penukaran jenis semasa proses nyahbox

operator mempunyai jenis yang dijangkakan untuk pembolehubah di kedua-dua hujung Dalam javascript, sebarang operasi yang tidak memenuhi Pembolehubah yang memenuhi jenis yang dijangkakan akan ditukar secara tersirat.

Pengendali logik

Apabila menjalankan operasi logik, hanya terdapat satu standard untuk penukaran tersirat: Hanya null, undefined, '', NaN, 0 dan false mewakili false, dan kes lain ialah true, seperti {}, [].

Operator aritmetik

  1. Jika kedua-dua hujung operator aritmetik ialah data jenis number, pengiraan dilakukan secara terus

  2. Jika terdapat bukan-number jenis data asas pada kedua-dua hujung operator aritmetik, gunakan number untuk kotak operan bukanNumber(), dan kemudian nyahkotak nilai pulangan ke dalam jenis number , mengambil bahagian dalam pengiraan;

  3. Jika terdapat jenis data rujukan pada kedua-dua hujung operator aritmetik, jenis rujukan akan dinyahkotak terlebih dahulu Jika hasilnya bukan jenis number , maka jenis rujukan akan dinyahkotak mengikut 条件2 Laksanakan, jika tidak laksanakan 条件1.

1 - true 
// 0, 首先 Number(true) 转换为数字 1, 然后执行 1 - 11 - null 
// 1,  首先把 Number(null) 转换为数字 0, 然后执行 1 - 01 * undefined 
//  NaN, Number(undefined) 转换为数字是 NaN , 然后执行 1 * NaN2 * ['5'] 
//  10, ['5'] 依照ToPrimitive规则进行拆箱会变成 '5', 然后通过 Number('5') 进行拆装箱再变成数字 5123 + {valueOf:()=>{return 10}}   
// 133  {valueOf:()=>{return 10}} 依照ToPrimitive规则会先调用valueOf,获得结果为10
Salin selepas log masuk

Apabila muncul di hadapan pembolehubah sebagai pengendali unari, ini bermakna menukar pembolehubah kepada jenis Number

+"10" 	
// 10  同 Number("10")+['5']  
// 5   ['5']依照ToPrimitive规则会变成 '5', 然后通过`Number`的拆箱操作再变成数字 5
Salin selepas log masuk

Penyambung rentetan

Simbol penyambung rentetan adalah sama dengan pengendali aritmetik .

  1. Jika kedua-dua hujung operator aritmetik adalah data jenis string, sambung terus
  2. Jika terdapat bukan-string jenis asas pada kedua-dua hujung operator, maka connect Data jenis asas selain string dikotak-kotak menggunakan String(), dan kemudian nilai pulangan dinyahkotak menjadi jenis asas untuk mengambil bahagian dalam penyambungan rentetan.
  3. Apabila terdapat jenis data rujukan di kedua-dua hujung , jenis rujukan akan dinyahkotak terlebih dahulu Jika hasilnya bukan jenisstring, kemudian laksanakan mengikut 条件2, jika tidak laksanakan. 条件1 .

Pengendali hubungan

  • NaN dan mana-mana jenis lain akan sentiasa kembali false (termasuk dirinya sendiri) apabila melakukan sebarang operasi hubungan. Jika anda ingin menilai sama ada pembolehubah ialah NaN, anda boleh menggunakan Number.isNaN() untuk menilai. Hasil perbandingan

  • null == undefined ialah true Selain itu, nilai perbandingan null, undefined dan sebarang hasil lain (tidak termasuk diri mereka sendiri) ialah false. .

    ditakrifkan oleh peraturan di sini null adalah jenis objek, tetapi akan terdapat ralat sintaks apabila memanggil valueOf atau toString.

  • Keadaan umum:

    1. 如果算术运算符两端均为number类型的数据,直接进行计算;
    2. 如果算术运算符两端存在非number的基本数据类型,则对非number的运算数使用Number()进行装箱,然后对返回值进行拆箱为number类型,参与计算;
    3. 算术运算符两端存在引用数据类型,则先对引用类型进行拆箱操作,如果结果为非number类型,则根据条件2执行,否则执行条件1
{} == !{}  
// false   Number({}.valueOf().toString())==> NaN , 所以题目等同于 NaN == false , NaN 和 任何类型比较都是 false[] == []  
// false  内存地址不同![] == 0  
// true   ![]==>false , 所以题目等同于 false==0 , Number(false)==>0 ,  所以结果为 true
Salin selepas log masuk

一些题目

  1. [] == ![]

        - 第一步,![] 会变成 false
        - 第二步,[]的valueOf是[],[]是引用类型,继续调用toString,题目变成: "" == false
        - 第三步,符号两端转换为Number, 得到 0==0
        - 所以, 答案是 true
    Salin selepas log masuk
  2. [undefined] == false

        - 第一步,[undefined]的valueOf结果为 [undefined],然后[undefined]通过toString变成 '' ,所以题目变成  '' == false
        - 第二步,符号两端转换为Number, 得到 0==0
        - 所以, 答案是 true !
    Salin selepas log masuk
  3. 如何使a==1 && a==2 && a==3的结果为 true

    var a = {
        value: 0,
        valueOf: function() {
            this.value += 1;
            return this.value    }};console.log(a == 1 && a == 2 && a == 3) // true
    Salin selepas log masuk
  4. 如何使a===1&&a===2&&a===3的结果为 true

    // 使用 defineProperty 进行数据劫持var value = 0;Object.defineProperty(window,"a",{
        get(){
            return ++value;
        }})console.log(a===1&&a===2&&a===3)  //true
    Salin selepas log masuk
  5. 实现一个无限累加函数

  6. 柯里化实现多参累加

相关推荐:javascript学习教程

Atas ialah kandungan terperinci Kemahiran JavaScript: membuka kotak dan penukaran jenis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan