javascript
javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set
parseFloat(x)對象:
將傳入的字符轉化為浮點數,若傳入的字符不能被轉化為數字型,則返回NaN
<script>console.log(parseFloat(0.0314E+2)); //3.14</script>parseInt(num,radix)對象:
將num看成radix某進制的數后轉化為十進制整數,radix的取值范圍為2-36
<script>console.log(parseInt(0.0314E+2)); //3console.log(parseInt(123, 16)); //291</script>Promise對象:
為了解決回調地獄問題帶來的代碼不好維護問題,可以使用promise對象解決這個問題,promise有三種狀態:pending異步操作未完成、resolved異步操作已完成、rejected異步操作失敗,從開始到結束三種狀態之間有兩種模式,這兩種模式分別是promise中傳入回調函數中的第一個參數和第二個參數;
var fs = require('fs');// 1.創建promise容器:一旦創建這個容器就會執行里面的代碼new Promise(function(resolve,rejecte){fs.readFile('./data/c.txt', 'utf8', function (err, data) {if (err) {rejecte(err)}else{resolve(data)};});//2.在容器中放一個函數并在其中執行異步操作});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)// 當 p1 讀取成功的時候// 當前函數中 return 的結果就可以在后面的 then 中 function 接收到// 當你 return 123 后面就接收到 123// return 'hello' 后面就接收到 'hello'// 沒有 return 后面收到的就是 undefined// 上面那些 return 的數據沒什么卵用// 真正有用的是:我們可以 return 一個 Promise 對象// 當 return 一個 Promise 對象的時候,后續的 then 中的 方法的第一個參數會作為 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')})其相關屬性和方法如下:
| Promise.all()方法 | 將多個promise實例包裝成一個promise實例,all中可以接收一個數組作為參數(這個參數可以不是數組,但是必須是lterator接口,即可迭代對象),數組中的每一項都是一個promise的對象實例,對象實例的執行結果將以一個數組的形式展現出來 | 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都已經fulfilled或rejected后的promise參數(參數也是 iterable型),用一個帶有對象的數組返回 | 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的一個子類,用于把單一的錯誤集合起來,本質上和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方法中傳入一個函數,函數中傳入一個參數用于接收promise失敗的原因,并對它進行處理),只有當promise失敗的時候才調用此方法 | 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,調用catch方法并打印了e |
| promise.finally()方法 | 返回一個promise,在promise結束時,無論結果是fulfilled或rejected都會執行指定的回調函數,它可以不用分情況解決問題 | 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)方法 | 迭代中某個對象的狀態發生改變,則發生改變的這個對象就會被返回,這個被返回的值用回調函數接收 | Promise.race([‘promise1’, ‘promise2’]).then((value) => {console.log(value);}); //promise1 |
| Promise.reject()方法 | 當promise的狀態成 rejected時,會調用 rejected狀態的回調函數,回調函數中的參數就是 rejected狀態時的理由 | var p = new Promise(function(resolve, reject) {reject(‘出錯了’);});p.then(null, function(s) {console.log(s);});//出錯了,等同于 var p = Promise.reject(‘出錯了’); |
| Promise.resolve()方法 | 調用時不帶參數,直接返回一個resolved狀態的 Promise 對象 | var promise1 = Promise.resolve(123);promise1.then((value) => {console.log(value);});//123 |
| Promise.then()方法 | 它最多有兩個參數,分別是promise的成功和失敗的回調函數,當異步操作完成,然后執行callback函數 | var promise1 = new Promise((resolve, reject) => {resolve(‘Success!’);});promise1.then(value => {console.log(value);}, reason => {console.error(reason);}); |
RangeError范圍報錯:
RangeError當一個值不在其所允許的范圍或者集合中時報錯,其實例對象需要new RangeError(a,b,c);可以接收三個可選參數,第一個參數是用來描述錯誤的信息,第二個參數是說明造成錯誤的文件名,第三個參數指報錯的行數,如:
<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創建實例化對象,同樣可傳入三個可選參數,1錯誤描述,2錯誤的文件,3錯誤行數,如:
<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是一個靜態的對象,不需要通過new創建的對象,它支持很多實用靜態的方法,如下表:
| Reflect.apply(a,b,c) | 可傳入三個參數,第一個表示被apply請求的方法,第二個參數表示這個被請求方法的使用對象,第三個參數表示這個方法中傳入的參數,如: Reflect.apply(console.log, undefined, [1, 2]); //1 2 | var res = Reflect.apply(new String().charAt, ‘ponies’, [2]);console.log(res); //n |
| Reflect.construct(a,…b) | 對構造函數實例化,相當于new操作,第一參數是構造函數,第二個參數接收一個數組,數組元素均為函數的參數 | 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) | 刪除數組索引為b的元素或對象的b屬性,本身返回一個布爾值 | 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數組索引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,有則返回屬性的描述,無則返回undefined | var obj = {‘age’: 18};var result = Reflect.getOwnPropertyDescriptor(obj, ‘age’);console.log(result);//{value: 18, writable: true, enumerable: true, configurable: true} |
| Reflect.has(a,b) | 判斷a對象中是否有屬性b,若有則返回true,否則返回false | var obj = {‘age’: 18};var result = Reflect.has(obj, ‘age’);console.log(result); //true |
| Reflect.isExtensible(a) | 判斷一個對象a是否可以添加新屬性,返回布爾值 | var obj = {‘age’: 18};var result = Reflect.isExtensible(obj);console.log(result); //true |
| Reflect.ownKeys(a) | 里面傳入一個數組或對象,以數組的形式返回一個這個對象的鍵或這個數組的所有元素,數組的最后多了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”, “length”],注意,這里數組最后多了個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) | 給數組添加元素或對象添加屬性和方法,本身返回布爾值,第一個參數表示被添加的目標對象,第二個參數表示屬性或索引,在數組中給某索引的元素添加新值,可以覆蓋之前的值,第三個參數表示添加屬性或元素的值 | 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 對象:
用于創建一個對象的代理,從而實現基本操作的攔截和自定義,語法: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指設置對象的某個屬性的值的方法,如:
<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>提示:本文圖片等素材來源于網絡,若有侵權,請發郵件至郵箱:810665436@qq.com聯系筆者 刪除。
筆者:苦海
總結
以上是生活随笔為你收集整理的javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 分页_80分页查询,不止写
- 下一篇: mysql允许所有用户连接_Mysql权