1. 程式人生 > >**JS資料型別之 object 可以與 String 相等**

**JS資料型別之 object 可以與 String 相等**

今天在瀏覽器微信開發者工具測試網頁的時候,發現寫出的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運算的機制是怎樣的?
微信開發者工具又為何不同?**