日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set

發(fā)布時間:2025/3/15 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

parseFloat(x)對象:

將傳入的字符轉(zhuǎn)化為浮點數(shù),若傳入的字符不能被轉(zhuǎn)化為數(shù)字型,則返回NaN

<script>console.log(parseFloat(0.0314E+2)); //3.14</script>

parseInt(num,radix)對象:

將num看成radix某進制的數(shù)后轉(zhuǎn)化為十進制整數(shù),radix的取值范圍為2-36

<script>console.log(parseInt(0.0314E+2)); //3console.log(parseInt(123, 16)); //291</script>

Promise對象:

為了解決回調(diào)地獄問題帶來的代碼不好維護問題,可以使用promise對象解決這個問題,promise有三種狀態(tài):pending異步操作未完成、resolved異步操作已完成、rejected異步操作失敗,從開始到結(jié)束三種狀態(tài)之間有兩種模式,這兩種模式分別是promise中傳入回調(diào)函數(shù)中的第一個參數(shù)和第二個參數(shù);

var fs = require('fs');// 1.創(chuàng)建promise容器:一旦創(chuàng)建這個容器就會執(zhí)行里面的代碼new Promise(function(resolve,rejecte){fs.readFile('./data/c.txt', 'utf8', function (err, data) {if (err) {rejecte(err)}else{resolve(data)};});//2.在容器中放一個函數(shù)并在其中執(zhí)行異步操作});var p1 = new Promise(function (resolve, reject) {fs.readFile('./data/a.txt', 'utf8', function (err, data) {if (err) {reject(err)} else {resolve(data)}})})var p2 = new Promise(function (resolve, reject) {fs.readFile('./data/b.txt', 'utf8', function (err, data) {if (err) {reject(err)} else {resolve(data)}})})var p3 = new Promise(function (resolve, reject) {fs.readFile('./data/c.txt', 'utf8', function (err, data) {if (err) {reject(err)} else {resolve(data)}})})p1.then(function (data) {console.log(data)// 當(dāng) p1 讀取成功的時候// 當(dāng)前函數(shù)中 return 的結(jié)果就可以在后面的 then 中 function 接收到// 當(dāng)你 return 123 后面就接收到 123// return 'hello' 后面就接收到 'hello'// 沒有 return 后面收到的就是 undefined// 上面那些 return 的數(shù)據(jù)沒什么卵用// 真正有用的是:我們可以 return 一個 Promise 對象// 當(dāng) return 一個 Promise 對象的時候,后續(xù)的 then 中的 方法的第一個參數(shù)會作為 p2 的 resolve// return p2}, function (err) {console.log('讀取文件失敗了', err)}).then(function (data) {console.log(data)return p3}).then(function (data) {console.log(data)console.log('end')})

其相關(guān)屬性和方法如下:

屬性或方法描述案例
Promise.all()方法將多個promise實例包裝成一個promise實例,all中可以接收一個數(shù)組作為參數(shù)(這個參數(shù)可以不是數(shù)組,但是必須是lterator接口,即可迭代對象),數(shù)組中的每一項都是一個promise的對象實例,對象實例的執(zhí)行結(jié)果將以一個數(shù)組的形式展現(xiàn)出來var arr = [1, 2];var obj = {str: ‘hello’};var num = 8;Promise.all([arr, obj, num]).then(function(e) {console.log(e);}); //[Array(2), {…}, 8]
Promise.allSettled(promises)方法將一個在所有給定的promise都已經(jīng)fulfilled或rejected后的promise參數(shù)(參數(shù)也是 iterable型),用一個帶有對象的數(shù)組返回var arr = [1, 2];var obj = {str: ‘hello’};var num = 8;Promise.allSettled([arr, obj, num]).then(function(e) {console.log(e);}); //[{…}, {…}, {…}]—0: {status: “fulfilled”, value: Array(2)}
Promise.any(iterable)方法傳入一個可迭代的promise對象,只要其中一個promise是成功的,就返回這個成功的promise,若迭代對象中沒有一個成功的promise對象,則返回一個失敗的promise對象, 和AggregateError類型的實例,它是Error的一個子類,用于把單一的錯誤集合起來,本質(zhì)上和Promise.all()是相反的var arr = [1, 2];var obj = {str: ‘hello’};var num = 8;Promise.any([arr, obj, num]).then(function(e) {console.log(e);}); //[1, 2]
promise.catch()方法返回一個promise,并且處理拒絕的情況(catch方法中傳入一個函數(shù),函數(shù)中傳入一個參數(shù)用于接收promise失敗的原因,并對它進行處理),只有當(dāng)promise失敗的時候才調(diào)用此方法var p1 = new Promise(function(resolve, reject) {fs.readFile(’./data/c.txt’, ‘utf8’, function(resolv, reject) {if (resolv) {rejecte(resolv);} else {resolve(reject);};});});p1.then(function(value) {console.log(value);}).catch(function(e) {console.log(e);}); //fs is not defined,調(diào)用catch方法并打印了e
promise.finally()方法返回一個promise,在promise結(jié)束時,無論結(jié)果是fulfilled或rejected都會執(zhí)行指定的回調(diào)函數(shù),它可以不用分情況解決問題var promise = new Promise(function(resolve, reject) {window.setTimeout(function() {if (false) {resolve(‘huangbiao’);} else {debuggerreject(‘error’);};}, 1000)}).then(function() {console.log(‘success’);}).catch(function() {console.log(‘catch’);}).finally(function() {console.log(‘finally’);});//[Violation] ‘setTimeout’ handler took 218231ms
Promise.race(iterable)方法迭代中某個對象的狀態(tài)發(fā)生改變,則發(fā)生改變的這個對象就會被返回,這個被返回的值用回調(diào)函數(shù)接收Promise.race([‘promise1’, ‘promise2’]).then((value) => {console.log(value);}); //promise1
Promise.reject()方法當(dāng)promise的狀態(tài)成 rejected時,會調(diào)用 rejected狀態(tài)的回調(diào)函數(shù),回調(diào)函數(shù)中的參數(shù)就是 rejected狀態(tài)時的理由var p = new Promise(function(resolve, reject) {reject(‘出錯了’);});p.then(null, function(s) {console.log(s);});//出錯了,等同于 var p = Promise.reject(‘出錯了’);
Promise.resolve()方法調(diào)用時不帶參數(shù),直接返回一個resolved狀態(tài)的 Promise 對象var promise1 = Promise.resolve(123);promise1.then((value) => {console.log(value);});//123
Promise.then()方法它最多有兩個參數(shù),分別是promise的成功和失敗的回調(diào)函數(shù),當(dāng)異步操作完成,然后執(zhí)行callback函數(shù)var promise1 = new Promise((resolve, reject) => {resolve(‘Success!’);});promise1.then(value => {console.log(value);}, reason => {console.error(reason);});

RangeError范圍報錯:

RangeError當(dāng)一個值不在其所允許的范圍或者集合中時報錯,其實例對象需要new RangeError(a,b,c);可以接收三個可選參數(shù),第一個參數(shù)是用來描述錯誤的信息,第二個參數(shù)是說明造成錯誤的文件名,第三個參數(shù)指報錯的行數(shù),如:

<script>var err = new RangeError('no find!', 'index.html', '10');if (true) throw err;//控制臺報錯: Uncaught RangeError: no find! at test.html:18 </script>

ReferenceError引用錯誤:

ReferenceError一個不存在的變量被引用是報錯,同樣通過new創(chuàng)建實例化對象,同樣可傳入三個可選參數(shù),1錯誤描述,2錯誤的文件,3錯誤行數(shù),如:

<script>try {throw new ReferenceError('Hello', 'someFile.js', 10);} catch (e) {console.log(e instanceof ReferenceError); // trueconsole.log(e.message); // "Hello"console.log(e.name); // "ReferenceError"console.log(e.fileName); // undefinedconsole.log(e.lineNumber); // undefinedconsole.log(e.columnNumber); //undefinedconsole.log(e.stack); // "@Scratchpad/2:2:9\n"}</script>

Reflect攔截javascript操作的方法:
Reflect是一個靜態(tài)的對象,不需要通過new創(chuàng)建的對象,它支持很多實用靜態(tài)的方法,如下表:

方法描述案例
Reflect.apply(a,b,c)可傳入三個參數(shù),第一個表示被apply請求的方法,第二個參數(shù)表示這個被請求方法的使用對象,第三個參數(shù)表示這個方法中傳入的參數(shù),如: Reflect.apply(console.log, undefined, [1, 2]); //1 2var res = Reflect.apply(new String().charAt, ‘ponies’, [2]);console.log(res); //n
Reflect.construct(a,…b)對構(gòu)造函數(shù)實例化,相當(dāng)于new操作,第一參數(shù)是構(gòu)造函數(shù),第二個參數(shù)接收一個數(shù)組,數(shù)組元素均為函數(shù)的參數(shù)function Person(name, age) {this.name = name;this.age = age;};var per = Reflect.construct(Person, [‘jack’, ‘18’]);console.log(per.name + ‘—’ + per.age); //jack—18
Reflect.defineProperty(a,b,c)給對象a添加一個屬性b,b屬性的屬性值是{value:c},其本身返回一個布爾值var obj = {};var bool = Reflect.defineProperty(obj, ‘name’, {value: ‘jack’});console.log(obj.name + ‘—’ + bool);//jack—true
Reflect.deleteProperty(a,b)刪除數(shù)組索引為b的元素或?qū)ο蟮腷屬性,本身返回一個布爾值var obj = {name: ‘jack’};var bool = Reflect.deleteProperty(obj, ‘name’);var arr = [1, 2, 3];var boolear = Reflect.deleteProperty(arr, 1);console.log(obj + ‘:’ + bool + ‘—’ + arr + ‘:’ + boolear); //{}:true—1,3:true
Reflect.get(a,b)獲取a對象b屬性的值或a數(shù)組索引b的元素,并返回這個值var obj = {name: ‘jack’};var bool = Reflect.get(obj, ‘name’);var arr = [1, 2, 3];var boolear = Reflect.get(arr, 1);console.log(bool + ‘—’ + boolear); //jack—2
Reflect. getOwnPropertyDescriptor(a,b)判斷對象a中是否有屬性b,有則返回屬性的描述,無則返回undefinedvar obj = {‘a(chǎn)ge’: 18};var result = Reflect.getOwnPropertyDescriptor(obj, ‘a(chǎn)ge’);console.log(result);//{value: 18, writable: true, enumerable: true, configurable: true}
Reflect.has(a,b)判斷a對象中是否有屬性b,若有則返回true,否則返回falsevar obj = {‘a(chǎn)ge’: 18};var result = Reflect.has(obj, ‘a(chǎn)ge’);console.log(result); //true
Reflect.isExtensible(a)判斷一個對象a是否可以添加新屬性,返回布爾值var obj = {‘a(chǎn)ge’: 18};var result = Reflect.isExtensible(obj);console.log(result); //true
Reflect.ownKeys(a)里面?zhèn)魅胍粋€數(shù)組或?qū)ο?#xff0c;以數(shù)組的形式返回一個這個對象的鍵或這個數(shù)組的所有元素,數(shù)組的最后多了length項const object1 = {age: 18,name: ‘jack’};var resultObj = Reflect.ownKeys(object1);const array1 = [1, ‘2’, 3, ‘4’];var resultArr = Reflect.ownKeys(array1); console.log(resultObj); console.log(resultArr); // [“age”, “name”][“0”, “1”, “2”, “3”, “l(fā)ength”],注意,這里數(shù)組最后多了個length
Reflect.preventExtensions(a)禁止向添加此方法的對象a后面添加新屬性或方法const object1 = {};object1.height = 170;Reflect.preventExtensions(object1);object1.weight = 20;console.log(object1.height); console.log(object1.weight); //170 undefined,被添加此方法后,此方法后面將不能在給對象添加屬性或方法了
Reflect.set(a,b,c)給數(shù)組添加元素或?qū)ο筇砑訉傩院头椒?#xff0c;本身返回布爾值,第一個參數(shù)表示被添加的目標(biāo)對象,第二個參數(shù)表示屬性或索引,在數(shù)組中給某索引的元素添加新值,可以覆蓋之前的值,第三個參數(shù)表示添加屬性或元素的值var obj = {};var objResult = Reflect.set(obj, “name”, “jack”);console.log(objResult);console.log(obj);var arr = [“1”, 2, “3”];var arrResult = Reflect.set(arr, arr.length, “s”);console.log(arrResult);console.log(arr);//true {name: “jack”} true [“1”, 2, “3”, “s”]
Reflect.setPrototypeOf(a,b)改變a對象的原型指向為b.prototype,并返回一個布爾值var obj = {};var bool = Reflect.setPrototypeOf(obj, Array.prototype);console.log(obj);console.log(bool) //Array {} true

Proxy 對象:

用于創(chuàng)建一個對象的代理,從而實現(xiàn)基本操作的攔截和自定義,語法:let p = new Proxy(target,handler);target指的是要代理的object或者function;handler指的是對代理對象進行各種操作行為處理

<script>let test = {name: "小紅"};testRes = new Proxy(test, {get(target, key) {console.log('獲取了getter屬性'); //獲取了getter屬性return target[key];}});console.log(testRes.name); //小紅</script>

get和set:

get指得到對象的某個屬性的值的方法,set指設(shè)置對象的某個屬性的值的方法,如:

<script>var o = {a: 7,get b() {return this.a + 1;},set c(x) {this.a = x / 2}};console.log(o.b); // 8o.c = 50;console.log(o.a); // 25</script>

提示:本文圖片等素材來源于網(wǎng)絡(luò),若有侵權(quán),請發(fā)郵件至郵箱:810665436@qq.com聯(lián)系筆者 刪除。
筆者:苦海

總結(jié)

以上是生活随笔為你收集整理的javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。