高程三 基本包裝類型部分的學習
阿新 • • 發佈:2019-03-03
ole bstr rdquo 轉換成 utf num 整數 pat amp
基本上包含了我作為一個沒有一點編程基礎的弟弟在學這一章時遇到的各種腦殼痛的地方...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
</head>
<body>
<script>
//用於操作基本類型值的特殊的引用類型:Boolean Number String
//實際上每讀取一個基本類型值,後臺就會創建一個對應的基本包裝類型的對象,從而讓我們調用一些方法操作這些數據
var s1 = "test";
var s2 = s1.substring(2);
//這裏,s1是基本類型不是對象,從邏輯上來說它不應該有substring方法,但後臺已經自動完成了一系列的處理。
//第二行代碼訪問s1時,其訪問過程處於讀取模式,在讀取模式中訪問字符串,後臺會自動完成下列操作:
//1:創建string類型的一個實例(實例的基本包裝類型的對象,是對象!) 2. 在實例上調用指定方法 3,銷毀實例
console.log(s1,s2);//s1沒有被銷毀
//引用類型與基本包裝類型的主要區別:對象的生存期
//用new操作符自主創建的引用類型的實例在執行流離開當前作用域之後才會被從內存中銷毀
////自動創建的基本包裝類型的對象則只存在於那行代碼的執行瞬間,然後立即被銷毀
//實例的解釋:即類的實例,如果學過面向對象編程就很容易明白了
//function MyClass(){} (object和function都是引用類型)
//var m=new MyClass();//m就是MyClass的實例,MyClass是類,new就是創建操作符
//var obj = new Object(); obj即為Object的實例,也就是一個對象
s1.color = "red";
console.log(s1.color);//上一行創建的(基本包裝類型)string對象 已經被銷毀了
//實例都是對象,而對象不都是實例
//對基本包裝類型的實例調用typeof會返回"object",所有基本包裝類型的對象轉換為布爾值時均為true
var str = new Object("text");//傳入的是字符串,創建String的實例
document.write(str instanceof String);//String表示基本包裝類型中的string
//在 JavaScript 中,判斷一個變量的類型嘗嘗會用 typeof 運算符,
//在使用 typeof 運算符時采用引用類型存儲值會出現一個問題,無論引用的是什麽類型的對象,
//它都返回 "object"。ECMAScript 引入了另一個 Java 運算符 instanceof 來解決這個問題。
//instanceof 運算符與 typeof 運算符相似,用於識別正在處理的對象的類型。
//與 typeof 方法不同的是,instanceof 方法要求開發者明確地確認對象為某特定類型。
var value = "100";
var num = Number(value);//轉型函數
document.write(typeof num + "</br>");
var obj_num = new Number(value);//調用了基本包裝類型的構造函數
document.write(typeof obj_num + "</br>");
//Boolean類型,與布爾值對應的引用類型
//布爾類型的實例重寫了valueOf()方法,返回true/false,重寫了tosting()方法,返回字符串的true/fasle
//原本的valueof()方法雖然也是返回true/false,但是返回的是布爾對象的原始布爾值
//基本包裝類型和單體內置對象都是特殊的引用類型
var booleanobj = new Boolean(false);
document.write("booleanobj" + booleanobj.valueOf() + "</br>");//typeof instanceof屬於操作符一類,用法和JavaScript的方法不同
//即便傳入的參數是false,其布爾值也為true
//當作為一個構造函數(帶有運算符 new)調用時,Boolean() 將把它的參數轉換成一個布爾值,並且返回一個包含該值的 Boolean 對象。
// 如果作為一個函數(不帶有運算符 new)調用時,Boolean() 只將把它的參數轉換成一個原始的布爾值,並且返回這個值。
// 註釋:如果省略 value 參數,或者設置為 0、-0、null、""、false、undefined 或 NaN,
//則該對象設置為 false。否則設置為 true(即使 value 參數是字符串 "false")。
var falseObj = new Boolean(false);
var re1 = falseObj && true; // 相當於true&&true,見行29註釋
document.write( re1 + "</br>");
var vO1 = falseObj.valueOf();
document.write("vO1 " + vO1 + "</br>");//false
document.write(typeof falseObj + "</br>");//object 註意與行66對比
var falseValue = false;
var re2 = falseValue && true;//創建一個Boolean實例,在這個實例上調用制定方法,銷毀這個實例
document.write( re2 + "</br>");
var vO2 = falseValue.valueOf();
document.write("vO2 " + vO2 + "</br>");//false
document.write(typeof falseValue + "</br>");//boolean
//!理解基本類型的布爾值與Boolean對象的區別和聯系是很重要的
// &&運算符和數學上的邏輯運算符號不同:
// l && r
// 相當於:
// ToBoolean(l) ? r : l
// 即:
// 1). 先將“左值”轉化為布爾值;
// 2). 如果這個布爾值為true,則返回“右值”,如果為false,則返回“左值”;
//attention: alert(Object)會隱形調用該對象的tostring()方法
//Number類型:調用Number構造函數時向其中傳遞相應數值來創建Number對象
//重寫了方法:valueof() tostring() tolocalstring()
var num1 = 10.005;
document.write( num1.toFixed(2) + "</br>");//顯示幾位小數,並能自動四舍五入
document.write( num1.toExponential(1) + "</br>");//返回以指數表示法表示的數值形式,參數同樣指定小數位數
//可以使用toPrecision()方法自動決定調用哪個方法
//string類型
var strobj = new String("abcdefg");
//其類型的每個實例都有一個length屬性,註意,即使包含雙字節字符,每個字符也只算一個字符
//字符方法:
document.write( strobj.charAt("0") + "</br>");//n
document.write( strobj.charCodeAt("1")+ "</br>");//115 返回字符編碼
document.write( strobj[1]+ "</br>");//s
document.write( strobj.concat(" xixixi")+ "</br>");//連接字符串 不會影響原有字符串
//與接下來的三個方法一樣都是返回基本類型的字符串值
document.write( strobj.slice(1,3)+ "</br>");//sn 會截到序號為3的前面一個
document.write( strobj.substring(1,3)+ "</br>");//sn
document.write( strobj.substr(1,3)+ "</br>");//snm 第二個參數指定的是返回字符串的長度
//第一個參數為負值時
document.write( strobj.slice(1,-3)+ "</br>");//會將負值加上字符串長度
document.write( strobj.substring(2,-3)+ "</br>");//會將負值轉換為0,並且這個方法會自動由較小的數作為開始位置
document.write( strobj.substr(1,-1)+ "</br>");//會將第一個參數加上字符串長度,而第二個參數轉換為0,即返回空字符串
//字符串位置方法(從字符串中查找子字符串)
document.write( strobj.indexOf("a")+ "</br>");//0,由前向後,
document.write( strobj.lastIndexOf("a")+ "</br>");//0,末尾向前,返回的序號也是由前向後排的!
//如果字符串只出現了一次,那麽兩個方法會返回相同的值
//兩個方法都可添加第二個參數,從此參數指定的位置向後(前)搜索
//eg:通過循環調用indexOf()方法來找到所有匹配的子字符串
var longstr = "rfgdhuijjfgavkolperhtfjmcxjowelfhniruiretuhacbnxgychrfeiquqwerszztderynuiccvttbuomgy";
//寫一個清除字符串中所有數字的方法
var pos = longstr.indexOf("j");
var store = "";
while(pos > -1){
store += " ";
store += pos;
pos = longstr.indexOf("j",pos+1);
}
for(pos;pos<longstr.length;pos++){
if(pos > -1){
store += " ";
store += pos;
console.log(pos);
pos = longstr.indexOf("j",pos);
}
}
// alert(store);
//你只會for循環嗎弟弟
//trim()方法用於刪除字符串(副本)中前置和後綴的空格
// longstr.toLocaleLowerCase()//針對特定地區的實現
// longstr.toLowerCase()
//RegExp類型 逃不掉的 給老子學
//通過RegExp類型來支持正則表達式
// var pattren = / pattren / flags
//pattern即為正則表達式,flags則為匹配模式
//g 全局模式 應用於所有字符串 i 不區分大小寫 m 多行
var pat1 = /[bc]at/i;//匹配bat 或 cat
var pat1 = new RegExp("[bc]at","i");
var pat2 = /.at/gi;//匹配所有以at結尾的
var pat3 = /\[bc\]at/i;//匹配所有的[bc]at
var pat4 = /\.at/gi;//匹配所有的.at
//使用行137方法創建的正則表達式字面量會始終共享一個實例,而由構造函數創建的每一個RegExp實例都是一個新實例
//RegExp的每個實例都具有這些屬性 global、ignorance、multiline,分別檢查是否設置了模式,為布爾值
//lastIndex,整數,開始搜索下一個匹配項的字符位置,從0開始
//source,正則表達式的字符串表示,即字面量模式去掉//後的值
//字符串中的match方法
var text = "Harold on the way";
var pattren = /o/gi;
var matches = text.match(pattren);
console.log(matches.index);//0;在第幾項找到
// matches[0];第一項是和整個模式匹配的字符串
// replace()方法,簡化替換字符串的操作
// replace("at","ond");只會替換第一個
// replace(/at/g,"ond");會替換全部匹配
//spilt方法
//spilt(",",2); 將原數組中“,”兩邊的分開形成數組
//localecompare方法,比較字符串與字符串參數在字母表中的位置,分別返回-1,0,1(視具體實現而定)
// formCharCode()方法,將字符編碼轉換為字符串
</script>
</body>
</html>
高程三 基本包裝類型部分的學習