Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 黄色男同视频,欧美成人免费,99视频九九精品视频在线观看

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JavaScript類型轉(zhuǎn)換機(jī)制,你了解嗎

          JavaScript類型轉(zhuǎn)換機(jī)制,你了解嗎

          們都知道,JavaScript是弱類型語(yǔ)言,在聲明一個(gè)變量時(shí),我們無(wú)法明確聲明其類型,變量的類型根據(jù)其實(shí)際值來(lái)決定,而且在運(yùn)行期間,我們可以隨時(shí)改變這個(gè)變量的值和類型,另外,變量在運(yùn)行期間參與運(yùn)算時(shí),在不同的運(yùn)算環(huán)境中,也會(huì)進(jìn)行相應(yīng)的自動(dòng)類型轉(zhuǎn)換。

          類型轉(zhuǎn)換的分類

          js的類型轉(zhuǎn)換只有三種類型的轉(zhuǎn)換: to string, to boolean, to number, 即原始數(shù)據(jù)類型{string, number, boolean, undefined, null} + 引用數(shù)據(jù)類型{object} —to→ {string, boolean, number}的類型轉(zhuǎn)換。

          而在這三種類型轉(zhuǎn)換當(dāng)中, 分為兩大塊:顯式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換。

          注:顯式類型轉(zhuǎn)換是隱式類型轉(zhuǎn)換的基礎(chǔ),隱式類型轉(zhuǎn)換就是在操作符的作用下進(jìn)行顯式類型轉(zhuǎn)換。

          一、顯式類型轉(zhuǎn)換

          1.1.將其他類型轉(zhuǎn)化成數(shù)值

          1.1.1 Number函數(shù)

          轉(zhuǎn)換情況:

          (1)字符串-->數(shù)字

          如果字符串是一個(gè)合法的數(shù)字,則直接轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字。
          如果字符串是一個(gè)非法的數(shù)字,則轉(zhuǎn)換為NaN。
          如果是一個(gè)空串或純空格的字符串,則轉(zhuǎn)換為0。

          (2)布爾-->數(shù)字

          true轉(zhuǎn)換為1。
          false轉(zhuǎn)換為0。

          (3)空值-->數(shù)字

          null轉(zhuǎn)換為0。

          (4)未定義-->數(shù)字

          undefined轉(zhuǎn)換為NaN。

          實(shí)踐一下:

          // 數(shù)值: 轉(zhuǎn)換后還是原來(lái)的值

          Number(123); //123

          // undefined:轉(zhuǎn)成 NaN

          Number(undefined) // NaN

          // null:轉(zhuǎn)成0

          Number(null) // 0

          // 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0

          Number(true) // 1

          Number(false) // 0

          // 字符串:如果可以被解析為數(shù)值,則轉(zhuǎn)換為相應(yīng)的數(shù)值

          Number('123') // 324

          // 字符串:如果不可以被解析為數(shù)值,返回 NaN

          Number('123abc') // NaN

          // 空字符串轉(zhuǎn)為0

          Number('') // 0

          // 對(duì)象:通常轉(zhuǎn)換成NaN(除了只包含單個(gè)數(shù)值的數(shù)組)

          Number({a: 1}) // NaN

          Number([1, 2, 3]) // NaN

          Number([5]) // 5

          1.1.2 parseInt函數(shù)

          將一個(gè)字符串中的有效的整數(shù)位提取出來(lái),并轉(zhuǎn)換為Number。

          var str='123.45px';

          parseInt(str); //123;

          //如果需要,也可以在parseInt()中加第二個(gè)參數(shù),表示進(jìn)制

          1.1.3 parseFloat函數(shù)

          將一個(gè)字符串中的有效的小數(shù)位提取出來(lái),并轉(zhuǎn)換為Number。

          var str='123.45px';

          parseFloat(str); //123.45;

          parseInt()函數(shù)和parseFloat()函數(shù)就是專門(mén)用來(lái)將一個(gè)字符串轉(zhuǎn)換為數(shù)字的。注意:如果對(duì) 非 String 的類型使用 parseInt()或 parseFloat() 則會(huì)先把它轉(zhuǎn)換為String,然后再操作。

          1.2.將其他類型轉(zhuǎn)化為字符串

          1.2.1 string函數(shù)

          對(duì)于Number Boolean,String都會(huì)調(diào)用他們的toString()方法來(lái)將其轉(zhuǎn)換為字符串,對(duì)于null值,直接轉(zhuǎn)換為字符串"null"。對(duì)于undefined直接轉(zhuǎn)換為字符串"undefined"。

          實(shí)踐一下:

          //字符串:轉(zhuǎn)換后還是原來(lái)的值

          String("a") // "a"

          //undefined:轉(zhuǎn)為字符串"undefined"

          String(undefined) // "undefined"

          //null:轉(zhuǎn)為字符串"null"

          String(null) // "null"

          //布爾值:true轉(zhuǎn)為字符串"true",false轉(zhuǎn)為字符串"false"

          String(true) // "true"

          // 數(shù)值:轉(zhuǎn)為相應(yīng)的字符串

          String(1) // "1"

          //對(duì)象

          String({a: 1}) // "[object Object]"

          String([1, 2, 3]) // "1,2,3"

          1.2.2 toString函數(shù)

          該方法不會(huì)影響到原變量,會(huì)將轉(zhuǎn)換的結(jié)果返回。
          注意:Null 和 Undefined 沒(méi)有 toString() 方法,如果調(diào)用他們的方法會(huì)報(bào)錯(cuò)。

          //null和undefinde,調(diào)用toString,會(huì)報(bào)類型錯(cuò)誤

          null.toString(); //TypeError

          undefined.toString(); //TypeError

          1.3.將其他類型轉(zhuǎn)化為布爾

          1.3.1 Boolean函數(shù)

          轉(zhuǎn)換情況
          (1)字符串 --> 布爾:除了空串其余全是true。
          (2)數(shù)值 --> 布爾:除了0和NaN其余的全是true。
          (3)null、undefined--> 布爾:都是false。
          (4)對(duì)象 -->布爾:都是true。

          //字符串:只有空串是false

          Boolean('') // false

          Boolean(' ') //true

          //數(shù)值:0,0.0和NaN是false

          Boolean(0) // false

          Boolean(0.0) // false

          Boolean(NaN) // false

          //空值:返回false

          Boolean(undefined) // false

          Boolean(null) // false

          //對(duì)象:都是true

          Boolean({}) // true

          Boolean([]) // true

          Boolean(new Boolean(false)) // true

          二、隱式類型轉(zhuǎn)換機(jī)制

          在隱式轉(zhuǎn)換中,可能最大的疑惑是:什么時(shí)候發(fā)生隱式轉(zhuǎn)換,轉(zhuǎn)換成什么類型?我們來(lái)看一看。

          2.1.自動(dòng)轉(zhuǎn)換為數(shù)值類型

          除了+有可能把運(yùn)算子轉(zhuǎn)為字符串,其他運(yùn)算符都會(huì)把運(yùn)算子自動(dòng)轉(zhuǎn)成數(shù)值。

          //如果操作值之一不是數(shù)值,則被隱式調(diào)用Number()函數(shù)進(jìn)行轉(zhuǎn)換。

          '5' - '2' // 3

          '5' * '2' // 10

          true - 1 // 0

          false - 1 // -1

          '1' - 1 // 0

          '5' * [] // 0

          false / '5' // 0

          'abc' - 1 // NaN

          null + 1 // 1

          undefined + 1 // NaN

          2.2.自動(dòng)轉(zhuǎn)換為字符串類型

          +運(yùn)算中,一旦存在字符串,則會(huì)進(jìn)行字符串拼接操作。

          '5' + 1 // '51'

          '5' + true // "5true"

          '5' + false // "5false"

          '5' + {} // "5[object Object]"

          '5' + function (){} // "5function (){}"

          '5' + undefined // "5undefined"

          '5' + null // "5null"

          2.3.自動(dòng)轉(zhuǎn)換為布爾類型

          2.3.1比較運(yùn)算(==、!=、 >、<),if、while都會(huì)自動(dòng)轉(zhuǎn)換為布爾類型。

          轉(zhuǎn)換規(guī)則參照:Boolean函數(shù)。

          if(undefined){ // undefined會(huì)轉(zhuǎn)化為boolean中的false

          console.log('真')

          }else{

          console.log('假') //'假'

          }

          接下來(lái)我們重點(diǎn)說(shuō)一下比較運(yùn)算。

          2.3.2 比較運(yùn)算符操作規(guī)則:

          (1)如果兩個(gè)操作值都是數(shù)值,則進(jìn)行數(shù)值比較。

          (2)如果兩個(gè)操作值都是字符串,則比較字符串對(duì)應(yīng)的字符編碼值。

          (3)如果只有一個(gè)操作值是數(shù)值,則將另一個(gè)操作值轉(zhuǎn)換為數(shù)值,進(jìn)行數(shù)值比較。

          (4)NaN是非常特殊的值,它不和任何類型的值相等,包括它自己,同時(shí)它與任何類型的值比較大小時(shí)都返回false。

          (5)null與undefined是相等的。

          注:null或undefined在與其他數(shù)據(jù)類型進(jìn)行比較返回false。

          10 >=8 //true

          '10'>='8' //false

          '10'>=8 //true

          NaN==NaN //false

          null==undefined //true

          undefined==0 //false

          總結(jié)

          JavaScript這門(mén)語(yǔ)言飽受詬病的點(diǎn)之一就是類型轉(zhuǎn)換, 有時(shí)候js的類型轉(zhuǎn)換機(jī)制確實(shí)會(huì)讓新手摸不著頭腦。希望看完這篇文章能讓剛?cè)腴T(mén)的或js沒(méi)有形成體系的同學(xué)有一個(gè)了解。

          大家可以記住:顯式類型轉(zhuǎn)換是隱式類型轉(zhuǎn)換的基礎(chǔ),隱式類型轉(zhuǎn)換就是在操作符的作用下進(jìn)行顯式類型轉(zhuǎn)換。

          cJinja 是一個(gè)使用cpp編寫(xiě)的輕量html模版解析庫(kù),依賴 ejson 來(lái)實(shí)現(xiàn)模版的數(shù)據(jù)替換(在jinja中稱為context,上下文)。模版的語(yǔ)法基本與django jinja一致,功能還算豐富。源碼僅有700行,適合學(xué)習(xí),覺(jué)得不錯(cuò)的點(diǎn)個(gè)star吧。

          (該程序?yàn)?https://github.com/HuangHongkai/tinyserver 中的一個(gè)模塊)

          編譯

          使用cmake來(lái)編譯,windows和linux下均可編譯。推薦使用clion作為IDE。

          編譯成功后在build目錄下會(huì)有l(wèi)ibcjinja.a和cjinja_test.exe這2個(gè)文件。libcjinja.a是靜態(tài)庫(kù),cjinja_test.exe是一個(gè)簡(jiǎn)單的測(cè)試程序。

          運(yùn)行測(cè)試程序后會(huì)出現(xiàn)output.html(該文件是tmp.html解析后的結(jié)果。)

          已經(jīng)完成的功能

          • 變量,例如 {{ var }}
          • 變量索引訪問(wèn),例如 {{ var.var2 }} {{ var[2] }} {{ var[2].key.value[2] }},其中**[]** 表示對(duì)數(shù)組(類似python的list)進(jìn)行索引, . 表示對(duì)object進(jìn)行索引(類似與python的dict)
          • 表達(dá)式計(jì)算(包括字符串拼接) ,例如{{ 1*1+2-3*var }} {{ 1+1*2-3/4 }} {{ "asdfsf"+var }}
          • for-endfor對(duì)列表進(jìn)行迭代, 例如 {% for var in list %} {% endfor %}
          • for-endfor對(duì)對(duì)象進(jìn)行迭代,例如 {% for key,value in object %} {% endfor %} 或者 {% for key in object %}{% endfor %} 或者 {% for ,value in object %} {% endfor %}
          • if-else-endif 語(yǔ)句, 其中if的條件支持四則運(yùn)算,簡(jiǎn)單的比較(!===)等,例如 {% if 1+1==2 %}aaa{% else %}bbb{%endif %}
          • 模版包含,嵌套其他的模版文件{% include 'other.html' %}
          • 模版語(yǔ)法錯(cuò)誤提示

          需要注意,表達(dá)式之間不能含有空格,例如{{ 1 + 1 }}是非法的,而{{ 1+1 }}是合法的。

          使用方法

          1. 變量和變量索引

          簡(jiǎn)單的例子如下,

          HtmlTemplate html("username:{{ username }}\n"
           "parm.list[1][2]: {{parm.list[1][2] }} \n"
           "parm.key: {{ parm.key }}",
           1); // 參數(shù)1表示傳入的是模版字符串,0表示傳入的是文件名,默認(rèn)為0
          JSONObject obj={
           {"username", 1234},
           {"parm", {
           {"key", "cde"},
           {"list", {1, {1,2.3, "abcd"}, "hahaha"}},
           }}
          };
          html.setValue(obj);
          cout << html.render() << endl << endl;
          /* 運(yùn)行后打印如下
          username:1234
          parm.list[1]: abcd 
          parm.key: cde
          */
          

          HtmlTemplate是一個(gè)庫(kù)的主要類,構(gòu)造函數(shù)為

          explicit HtmlTemplate(const string& str, int flag=0); // flag=0是str表示文件路徑,不為0是表示傳入的模版字符串

          其中str參數(shù)為字符串,可以表示html模板原始串,也可也表示為文件的路徑,flag默認(rèn)為0。

          setValue 方法表示傳入數(shù)據(jù)給模版對(duì)象。

          render() 方法表示將模版解析成字符串。

          JSONObject來(lái)源于 ejson 庫(kù),用來(lái)模擬python的dict,構(gòu)造函數(shù)也比較容易看懂。

          2. 列表迭代

          HtmlTemplate html("{% for x in list %}{{ x }}\n{%endfor%}"
           "此時(shí)x已經(jīng)是臨時(shí)變量了,不可以在打印了 {{x}}\n"
           , 1);
          JSONObject obj=OBJECT(
           KEYVALUE("list", LIST(1,2,3,4,5))
          );
          cout << html.setValue(obj).render() << endl << endl;
          /*運(yùn)行后輸出如下
          1
          2
          3
          4
          5
          此時(shí)x已經(jīng)是臨時(shí)變量了,不可以在打印了 
          */
          

          注意到在迭代過(guò)程中x是作為臨時(shí)變量,在外部的話是無(wú)法打印出來(lái)的。

          3. 字典迭代

          HtmlTemplate html("{% for key in dict %}迭代1: 字典的key值為 {{ key }}\n{% endfor %}"
           "{% for key,value in dict %}迭代2: 字典的key值為 {{ key }}, value值為 {{ value}}\n{% endfor %}"
           "{% for ,value in dict %}迭代3: 字典的value值為 {{ value }}\n{% endfor %}", 1);
          JSONObject obj=OBJECT(
           KEYVALUE("dict", OBJECT(
           KEYVALUE("key1", "value1"),
           KEYVALUE("key2", 1234),
           KEYVALUE("key3", nullptr),
           ))
          );
          cout << html.setValue(obj).render() << endl << endl;
          /*運(yùn)行后輸出
          迭代1: 字典的key值為 key1
          迭代1: 字典的key值為 key2
          迭代1: 字典的key值為 key3
          迭代2: 字典的key值為 key1, value值為 value1
          迭代2: 字典的key值為 key2, value值為 1234
          迭代2: 字典的key值為 key3, value值為 null
          迭代3: 字典的value值為 value1
          迭代3: 字典的value值為 1234
          迭代3: 字典的value值為 null
          */
          

          4. 字符串拼接與表達(dá)式計(jì)算

          HtmlTemplate html("{{ a+b+c+\"444\" }}\n"
           "{{x}} * {{y}} + 2 * 3 - 4 / {{x}}={{ x*y+2*3-4/x }}\n",
           1);
          JSONObject obj=OBJECT(
           KEYVALUE("a", "111"),
           KEYVALUE("b", "222"),
           KEYVALUE("c", "333"),
           KEYVALUE("x", 12),
           KEYVALUE("y", 34)
           );
          cout << html.setValue(obj).render() << endl << endl;
          /*運(yùn)行后輸出
          111222333444
          12 * 34 + 2 * 3 - 4 / 12=413.667
          */
          

          5. if-else-endif語(yǔ)句

          HtmlTemplate html("{% if 1==1 %} 1==1 成立 {% else %} 1==1不成立 {%endif %}\n"
           "{% if !x %} x為空 {% else %} x不為空 {%endif %}\n"
           "{% if x==2 %} x==2 成立 {% endif %}\n"
           "{% if x+1!=2 %} x+1!=2 成立 {% endif %}\n"
           "{% if x<3 %} x<3 成立 {% endif %}\n"
           "{% if x>1 %} x>1 成立 {% endif %}\n"
           "{% if str==\"abcd\" %} str為abcd {% endif %}\n"
           "{% if 1 %} 常量表達(dá)式1 {% endif %}\n"
           "{% if 0 %} 常量表達(dá)式0,此處不會(huì)輸出 {%endif%}", 1);
          JSONObject obj={
           {"x", 2},
           {"str", "abcd"}
          };
          cout << html.setValue(obj).render() << endl;
          /*運(yùn)行后輸出
           1==1 成立 
           x不為空 
           x==2 成立 
           x+1!=2 成立 
           x<3 成立 
           x>1 成立 
           str為abcd 
           常量表達(dá)式1 
          */
          

          6.for與if嵌套使用

           HtmlTemplate html("{%for x in list%}"
           "{%if x %}"
           "{% for y in list2%}"
           "{{x}} * {{y}}={{ x*y }}\n"
           "{% endfor %}"
           "{% else %}"
           "x的值為空\(chéng)n"
           "{%endif%}"
           "{% endfor%}", 1);
          JSONObject obj=OBJECT(
           KEYVALUE("list", LIST(1,2,3,4,5)),
           KEYVALUE("list2", LIST(1,2,3)),
          );
          cout << html.setValue(obj).render() << endl << endl;
          /*運(yùn)行后輸出
          1 * 1=1
          1 * 2=2
          1 * 3=3
          2 * 1=2
          2 * 2=4
          2 * 3=6
          3 * 1=3
          3 * 2=6
          3 * 3=9
          4 * 1=4
          4 * 2=8
          4 * 3=12
          5 * 1=5
          5 * 2=10
          5 * 3=15
          */
          

          7.模版文件作為輸出

          HtmlTemplate html("tmpl.html");
          JSONObject context=OBJECT(
           ...
          );
          FILE* f=fopen("output.html", "w"); // 寫(xiě)入到文件中
          string&& str=html.setValue(context).render();
          fwrite(str.c_str(), 1, str.size(), f);
          fclose(f);
          /*運(yùn)行后,代開(kāi)當(dāng)前目錄的tmpl.html文件作為輸入,輸出文件為output.html*/
          /*如果tmpl.html不存在則拋出異常*/
          

          8. 異常處理

          HtmlTemplate html("{% if 1 %} xxx ", 1);
          // 不傳入context
          try {
           cout << html.render() << endl;
          } catch(exception& e) {
           cerr << e.what() << endl;
          }
          cout << endl;
          

          運(yùn)行后終端上打印如下,

          會(huì)提示異常的類名,異常文件所在位置,代碼行數(shù),以及一些錯(cuò)誤的信息。

          討論

          1. 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的表達(dá)式計(jì)算器用什么方法比較好?(例如 {{ 2.3*3+4/5*x }} 這類表達(dá)式)

          我分享一下我自己的方法,有什么更好的方法一起討論一下。

          • 第一步,先把數(shù)據(jù)和符號(hào)提取出來(lái)放入到數(shù)組中,輸入類型全部設(shè)為double。例如上面那個(gè)表達(dá)式,符號(hào)提取出來(lái)是{*, /, *}, 數(shù)據(jù)提取出來(lái)是{2.3, 3, 4, 5, x}
          • 這一步位于__parse_var這個(gè)函數(shù),比較簡(jiǎn)單不詳細(xì)討論。
          • 第二步,先計(jì)算乘除法,結(jié)果放入棧中,在對(duì)棧中元素計(jì)算加減法(按照我們平常計(jì)算表達(dá)式的思路先乘除后加減),這一步實(shí)現(xiàn)如下(其中運(yùn)用到C語(yǔ)言的宏和C++11的匿名函數(shù))
          double cJinja::HtmlTemplate::calculator(vector<any>& number, vector<char>& op) {
           // 例如下表達(dá)式會(huì)成為
           // 1 - 2 - 3 + 2 *3 * 4 - 4*5
           // vector<char> op={ '-', '-', '+', '*', '*', '-', '*' };
           // vector<any> number={ 1, 2, 3, 2, 3, 4, 4, 5 };
           if (number.size() !=op.size() + 1)
           throwException(TemplateParseException, "運(yùn)算符號(hào)數(shù)和操作數(shù)不匹配");
           /* 定義計(jì)算器的內(nèi)部函數(shù) */
           auto calc=[](any& var1, double var2, char op) -> double{
           // var2 + var1
           // var2 * var1
           // var2 - var1
           // var2 / var1
           // 注意順序
          #define CALC(op2) \
           if(#op2[0]==op) { \
           if (var1.type()==typeid(int)) \
           return var2 op2 static_cast<double>(any_cast<int>(var1)); \
           else if (var1.type()==typeid(float)) \
           return var2 op2 static_cast<double>(any_cast<float>(var1)) ; \
           else if (var1.type()==typeid(double)) \
           return var2 op2 static_cast<double>(any_cast<double>(var1)) ; \
           }
           CALC(+);
           CALC(-);
           CALC(*);
           CALC(/);
           throwException(TemplateParseException, "不允許對(duì)空指針進(jìn)行運(yùn)算");
          #undef CALC
           };
           vector<double> num_stack; // 計(jì)算中間結(jié)果存儲(chǔ)棧
           num_stack.push_back(calc(number[0], 0, '+')); // 獲取值 number[i+1] + 0 (加法運(yùn)算零元為0,乘法運(yùn)算零元為1)
           /* 計(jì)算 * / 法*/
           for (size_t i=0; i < op.size(); i++) {
           if (op[i]=='+' || op[i]=='-') {
           num_stack.push_back(calc(number[i + 1], 0, '+')); // number[i+1] + 0
           }
           else if (op[i]=='*' || op[i]=='/') {
           double var1=num_stack.back(); num_stack.pop_back();
           num_stack.push_back(calc(number[i + 1], var1, op[i])); // var1/number[i+1] 或者是 var1/number[i+1]
           } else
           throwException(TemplateParseException, str_format("非法操作符 %d", op[i]));
           }
           /* 計(jì)算 + - 法*/
           double result=num_stack[0];
           size_t i=1;
           for (auto& ch : op) {
           if (ch=='+') {
           result +=num_stack[i++];
           } else if(ch=='-') {
           result -=num_stack[i++];
           }
           }
           return result;
          }
          

          2. 拋出異常包含更多的信息

          我定義了一個(gè)throwException宏,如下

          #define throwException(Exception, ...) { \
           std::cerr << "[" << #Exception << "] : FILE: " << string(__FILE__).substr(string(__FILE__).find_last_of('/') + 1) << " LINE: " << __LINE__ << " FUNCTION: " <<__FUNCTION__ << std::endl; \
           throw Exception(__VA_ARGS__); \
           }
          

          其中__FILE__ 為文件名,__LINE__ 為當(dāng)前代碼行數(shù),這些都是C中的內(nèi)置宏,__VA_ARGS__是可變參數(shù),對(duì)應(yīng)于宏函數(shù)參數(shù)中的....

          一、網(wǎng)站禁止復(fù)制粘貼!選擇目標(biāo)網(wǎng)頁(yè)兼容性模式為IE11解決方法:

          1、打開(kāi)目標(biāo)網(wǎng)頁(yè)→→點(diǎn)擊網(wǎng)址后面→→選擇智能切核→→選擇兼容性模。

          2、打開(kāi)目標(biāo)網(wǎng)頁(yè)→→右鍵選擇切換兼容性模式→→選擇兼容性模式為IE11 →→即可隨意復(fù)制了。

          3、打開(kāi)目標(biāo)網(wǎng)頁(yè)→→點(diǎn)擊目標(biāo)網(wǎng)頁(yè)內(nèi)容→→右鍵選擇網(wǎng)頁(yè)另存為(s)...Ctrl+S →→打開(kāi)已經(jīng)保存好的目標(biāo)網(wǎng)頁(yè)→→右鍵選擇切換兼容性模式→→選擇兼容性模式為IE11 →→即可隨意復(fù)制了,使用Ctrl+A選擇網(wǎng)頁(yè)全部文字,Ctrl+C復(fù)制,新建文本檔案,Ctrl+V粘貼。


          其二、網(wǎng)站不讓你復(fù)制文字?手動(dòng)輸入javascript:void($={}); 這串代碼1秒解除限制方法:

          1、JavaScripty代碼 打開(kāi)英文鍵盤(pán)輸入下列代碼。

          javascript:void($={}); 注意代碼要手動(dòng)輸入,復(fù)制粘貼是沒(méi)有用的哦!代碼后面的;輸不輸入無(wú)所謂。

          我們進(jìn)入需要復(fù)制文字的網(wǎng)頁(yè),然后將地址欄的鏈接刪除,輸入這串代碼然后按下Enter鍵,再試試文字就可以復(fù)制了哦!

          $符號(hào)怎么輸入:1.在電腦上雙擊打開(kāi)WORD進(jìn)入。2.點(diǎn)擊右下角的輸入法,將其切換為英文狀態(tài)。3.此時(shí)按住SHIFT,然后連續(xù)按壓下上方數(shù)字4鍵。

          2、瀏覽器查看源文件

          有些瀏覽器是可以在頁(yè)面右擊,通過(guò)查看源文件來(lái)找到你需要復(fù)制的文字段落,復(fù)制完就可以粘貼到你的文檔中了哦!缺點(diǎn)是段落很多,不容易找到你需要復(fù)制的文字。

          3、OCR識(shí)別技術(shù)

          隨著科技的發(fā)展,OCR識(shí)別技術(shù)已經(jīng)很完善了,我們可以使用迅捷PDF轉(zhuǎn)換器中的圖片轉(zhuǎn)文字(OCR),將需要復(fù)制的文字截圖并上傳到這個(gè)工具中,然后一鍵輸出成Word 文檔,這種方法可以批量轉(zhuǎn)換多張圖片,效率很高!


          4、保存為網(wǎng)頁(yè)

          一般瀏覽器都支持保存為網(wǎng)頁(yè)HTML文件,然后打開(kāi)這個(gè)文件,就可以自由復(fù)制里面的內(nèi)容了。

          學(xué)會(huì)了這幾種方法,以后再也不用擔(dān)心網(wǎng)頁(yè)上的文字不支持復(fù)制的情況了!


          其三、網(wǎng)頁(yè)禁止復(fù)制粘貼怎么解決教程:

          (一)1、打開(kāi)目標(biāo)網(wǎng)頁(yè),選中網(wǎng)頁(yè)的地址欄。


          2、在地址欄輸入下行代碼,全部輸入。注意代碼要手動(dòng)輸入,復(fù)制粘貼是沒(méi)有用的哦!

          javascript:void($={});

          按下回車鍵(Enter),破解完成。(回車后不會(huì)跳轉(zhuǎn)網(wǎng)頁(yè))


          3、需要注意的是,如果網(wǎng)頁(yè)被刷新,限制會(huì)恢復(fù),需要重新輸入代碼。

          (二)1、打開(kāi)右上角工具,選擇最后的選項(xiàng)


          2、選擇【高級(jí)設(shè)置】-【網(wǎng)頁(yè)設(shè)置】,點(diǎn)擊【網(wǎng)頁(yè)內(nèi)容高級(jí)設(shè)置】


          3、找到【JavaScript】選項(xiàng)-【不允許任何網(wǎng)站運(yùn)行 JavaScript】


          4、完成,關(guān)閉選項(xiàng)標(biāo)簽頁(yè)。(做完之后可以調(diào)回去)

          (三)1、用瀏覽器隨便打開(kāi)一個(gè)網(wǎng)頁(yè),添加到收藏夾,*放到瀏覽器的標(biāo)簽欄,方便使用。這里以百度為例


          2、添加之后右鍵選擇編輯,修改名字為【破解限制】,在地址欄粘貼以下代碼

          javascript:(function(){eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p}('5 2=8;5 3=2.K;3.7=3.k=3.e=3.9=3.6=3.y=3.7=3.z=2.7=2.k=2.e=2.9=2.6=4;2.7=2.6=2.c=2.9=p(){r t};g(8.n||8){d=4;c=4;6=4}5 a=8.15(\'*\');o(5 i=a.q-1;i>=0;i--){5 b=a[i];g(b.n||b){d=4;c=4}}s(h(\'%u%v%w%x%j%17%A%B%C%j%D\')+\'\E\'+h(\'%F%G%H%I%J%l%L%l%M%N%O%P%Q%R%S%T%U%V%W%X%Y\')+\'\Z.10.11\');3.m.13=\'14!f\';3.m.16=\'12!f\';',62,70,'||doc|bd|null|var|oncontextmenu|onselectstart|document|onkeydown|arAllElements|elmOne|onmousedown|onmouseup|onpaste|important|with|unescape||u5236|oncopy|u7528|style|wrappedJSObject|for|function|length|return|alert|true|u5DF2|u89E3|u9664|u590D|onmousemove|ondragstart|u53F3|u952E|u9650|uFF01|u000d|u66F4|u591A|u7CBE|u5F69|u5B9E|body|u5e94|uFF0C|u8BF7|u5173|u6CE8|u300E|u0065|u5f27|u5ea6|u7535|u5b50|u5546|u52a1|u300F|u000dwww|ehudu|com|text|webkitUserSelect|auto|getElementsByTagName|MozUserSelect|u4E0E'.split('|'),0,{}))})()


          3、保存,完成。打開(kāi)需要破解的網(wǎng)頁(yè),點(diǎn)一下剛才創(chuàng)建的標(biāo)簽,破解完成,但每次打開(kāi)網(wǎng)頁(yè)都需要點(diǎn)一下破解的標(biāo)簽。要求:瀏覽器必須能執(zhí)行javascript代碼,其它瀏覽器添加書(shū)簽類似。


          (四)1、使用Ctrl+A選擇網(wǎng)頁(yè)全部文字,Ctrl+C復(fù)制,新建文本檔案,Ctrl+V粘貼,刪除不需要的文字。(這個(gè)方法只適用于網(wǎng)頁(yè)內(nèi)容無(wú)法選中的網(wǎng)頁(yè),有時(shí)候會(huì)無(wú)法復(fù)制,這時(shí)候就需要用到上面的方法了)


          主站蜘蛛池模板: 国产乱码伦精品一区二区三区麻豆| 性色AV一区二区三区天美传媒| 亚洲国产情侣一区二区三区| 精品国产免费观看一区| 成人区人妻精品一区二区不卡视频| 精品福利视频一区二区三区 | 天堂Av无码Av一区二区三区| 国产乱码精品一区二区三| 午夜爽爽性刺激一区二区视频| 国产一区二区三区不卡观| 无码日韩人妻AV一区免费l| 无码人妻精品一区二区蜜桃网站| 一夲道无码人妻精品一区二区| 福利一区在线视频| 精品香蕉一区二区三区| 性无码免费一区二区三区在线| 国产成人精品一区二三区在线观看 | 无码欧精品亚洲日韩一区夜夜嗨| 一区一区三区产品乱码| 日韩精品一区二区亚洲AV观看 | 在线电影一区二区| 中文字幕视频一区| 久久国产精品亚洲一区二区| 国产在线观看一区二区三区精品 | 一区二区无码免费视频网站| 无码一区二区三区| 亚洲AV本道一区二区三区四区| 久久精品无码一区二区日韩AV| 欧洲精品码一区二区三区免费看 | 无码日韩精品一区二区免费| 亚洲高清美女一区二区三区| 亚洲综合av永久无码精品一区二区 | 国产在线观看一区二区三区四区| 欧美日韩国产免费一区二区三区 | 日韩精品人妻一区二区三区四区 | 国产精品亚洲一区二区三区久久 | 国产在线不卡一区二区三区 | 狠狠做深爱婷婷久久综合一区| 成人精品一区二区户外勾搭野战| 3d动漫精品一区视频在线观看 | 久久一区二区三区精华液使用方法 |