**JS資料型別之 object 可以與 String 相等**
阿新 • • 發佈:2019-01-08
今天在瀏覽器和微信開發者工具測試網頁的時候,發現寫出的react元件無法渲染出來,多番除錯終於發現問題所在,廢話不多說上程式碼。
先來看一般瀏覽器中的程式碼
var HeaderMid = React.createClass({
headerfn :function(){
var HeaderTitle;
var reg = new RegExp('mui\/{1}.{2,}html', 'i');
var r = window.location.href.substr(1).match(reg);**注意此處在微信中會有差異**
var urlStr =[
"mui/index.html",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",];
var headerStr=[
<b className="logo"></b>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>];
//在這裡嘗試了一下直接把**html標籤**寫在**陣列**中,居然順利被解析,意料之外的收穫
var t;
for(var i=0;i<urlStr.length;i++){
console.log(typeof(r));// Object
console.log(typeof(urlStr[i]));//String
console.log(urlStr[i]==r); //True
/*原來以為兩種型別不同的資料是不會相等的,但是此處居然相等了,不過在微信中,這裡不相等,結果為false,個人猜測是**微信執行的是嚴格模式**,只是作為初學者,暫時沒有辦法證明,**此處存疑**。*/
urlStr[i]==r ? t=i : '';
t==i ? HeaderTitle=headerStr[i]:'';
console.log(HeaderTitle);
}
return HeaderTitle;
}
再來看微信開發者工具中的程式碼
var HeaderMid = React.createClass({
headerfn :function(){
var HeaderTitle;
var reg = new RegExp('mui\/{1}.{2,}html', 'i');
var r = window.location.href.substr(1).match(reg).toString().toLowerCase();**在微信開發者工具中,必須先把object資料轉換為String資料型別,並且boolean運算大小寫敏感**
var urlStr =[
"mui/index.html",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",
"xxxxxxxxxxxxx",];
var headerStr=[
<b className="logo"></b>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>,
<h2>xxxxxxxxxxxxx</h2>];
//在這裡嘗試了一下直接把**html標籤**寫在**陣列**中,居然順利被解析,意料之外的收穫
var t;
for(var i=0;i<urlStr.length;i++){
console.log(typeof(r));// Object
console.log(typeof(urlStr[i]));//String
console.log(urlStr[i]==r); //false 微信開發者工具中,boolen運算大小寫敏感
console.log(urlStr[i].toLowerCase()==r); //true
urlStr[i].toLowerCase()==r ? t=i : '';
t==i ? HeaderTitle=headerStr[i]:'';
console.log(HeaderTitle);
}
return HeaderTitle;
}
**疑問 :
普通瀏覽器下 boolean運算的機制是怎樣的?
微信開發者工具又為何不同?**