Daquanの基本JS

JSの基本

基本的な構文の
一致がある場合*スイッチサイクル(提供式x(典型的には変数)の値が比較式の構造を有する各ケースは、その後場合は、関連するブロックで実行されるであろう。 )コードが実行されている場合を防ぐため、自動的にブレークダウン使用して、型変換ではありません

var x;
switch(x){
case true:console.log("x类型转换")   ;
default:console.log("x没有发生类型转换");
 }//case没有发生类型转换    switch语句执行严格相等

三項演算子*

var a=1;
console.log(a?"a has a value":"a not has a value");//a has a value
 //利用三元运算符,输出相应提示
n=2;
 var msg="数字"+n+"是"+(n%2===0?"偶数":"奇数");//偶数
  console.log(msg);*/
   //利用三元运算符,在字符串之间插入不同的值

*ブレイクと継続ステートメントは、自動的に閉じたり、コードのブロックのうちされています

var num = 0;
       for (var i = 0 ; i < 10 ; i++){
           console.log("i="+i);
           for (var j = 0 ; j < 10 ; j++){
               console.log("j="+j);
               if( i == 5 && j == 5 ){
                   console.log("i,j=5");
                   break;
               }
               num++;//95
           }
       }
       console.log(num);//当i,j=5时,break会结束j的循环,但是不会影响i的循环
var num=0;
       for(var i=0;i<10;i++){
           console.log("i="+i);
           for(var j=0;j<10;j++){
               console.log("j="+j);
               if(i==5&&j==5){
                   console.log("i,j=5");
                   continue;
               }
               num++;//99
           }
       }
       console.log(num);//当i,j=5的时候,continue会自动跳出这个循环,继续下一个

*ラベルタグ

var num = 0;
       outPoint://这里为label,标签名为outPoint
           for (var i = 0 ; i < 10 ; i++){
               console.log("i="+i)
               for (var j = 0 ; j < 10 ; j++){
                   console.log("j="+j)
                   if( i == 5 && j == 5 ){
                       console.log("i,j=5")
                       console.log(num)
                       break outPoint;
                   }
                   num++;//55
               }
           }
       console.log(num);//有label标签之后,break会结束任何的代码块循环,所以当i,j=5的时候,break结束了i,j的循环,只循环了55次
var num = 0;
       outPoint:
           for (var i = 0 ; i < 10 ; i++){
               console.log("i="+i)
               for (var j = 0 ; j < 10 ; j++){
                   console.log("j="+j)
                   if( i == 5 && j == 5 ){
                       console.log("i,j=5")
                       console.log(num)
                       continue outPoint;
                   }
                   num++;//95
               }
           }//同理continue会跳出i.j的循环

データ型
JavaScriptは、6つのデータタイプがあります。文字(文字列)、オブジェクト(オブジェクト)、未定義、ヌル値(数)、ブール値
ES6新しいシンボル()を入力しながら、
値型でJSの3つの方法が決定されます。
1 :typeof演算オペレータ
数、オブジェクト、文字列、関数:配列ため、ヌル、等オブジェクト戻り、typeof演算のみ領域タイプ値は、唯一typeof演算値の6種類与えるために、参照タイプを区別することができない 、未定義、ブール。
2:このタイプの方法は、基準のinstanceofを決定するためのコンストラクタです

var p =new Person();
console.log(p instanceof Person);//true``

。3:Object.prototype.toString()
NULLと未定義の
変換値が「空の」手段を示すヌル、変換された値が0になった場合、ここで不定不定はNaNを返し、示す
ブール
演算子以下;前オペレータ2と単項&&、||、または:それはブール値を返します!ノン、比較演算子(<、<=、>、> =)、等価演算子(== ,! == ,! =、==)は
唯一の6つの値は、ヌル(falseに未定義変換されNaNに、0、偽、ヌル文字)
の値は
整数および浮動小数点
のすべての数値は、64ビットの浮動小数点数はJavaScriptに格納されているに基づいて、1.0と1とが等しい、基礎となる言語が整数でない
値の範囲は、
数値範囲で表すことができます。パワー2~2 1024 -1023番目のパワーは
、デジタル無限(無限大)であると、正のオーバーフローを発生する
デジタル-Infinity(マイナス無限大)と、負のオーバーフロー
MAX_VALUEにおける被写体と番号を提供し、同時にMIN_VALUEの最大値と最小

バイナリ:0Bまたは先行0Bは、0,1からなる
進:先行0°、0O、又は0をリードして、そしてなる0-7番号あり
小数:0なしプレフィックス
進システム:接頭辞の0xまたは0X
のNaN3
NaNには、0で割っ0を取得する、デジタル解析エラーが場合があるであろう数のタイプに属し、NaNはNaNには、IndexOfメソッドは、アレイを使用し得るであろう任意の数の間に独自にちょうど等しい、任意の数に等しく、およびNaNの操作ではありませんオペレータは、厳密に同じであるので、この方法は、NaNを使用することができない
*関連付けられた変換方法
のparseInt:
整数への文字列のための方法を。戻り値は、2つだけの可能性のいずれかの10進整数のいずれかNaNです。

1)文字列の先頭のスペース場合は、スペースは自動的に削除されます。
parseIntは引数が文字列でない場合2)、それは、最初の文字列に変換します。
3)彼らは数字に変換されていない場合、文字は、変換が続いている整数に文字列、もはや進まない、戻りが良い部分に転送されています。
parseFloatは():
パラメータが文字列または最初の文字の文字列でない場合、フロートに文字列を変換は、浮動戻りNaNに変換することができない、空の文字列がNaNに変換されることに留意すべきである
ますisNaN。
NaNの判定が真ストリング、アレイ、のNaNが戻り、使用されていない
別の方法は:それ自体がNaN自体として変化すると、関数を作成することが可能です

function   msgNaN(value){
            return value !==value
}

isFiniteの方():
数値が正常数値でないかどうかを決定するために使用される、正の無限大、負の無限大に加え、NaNには偽を返し、残りがtrueを返します。
文字列の
長い文字列がある場合、文字列は、文句を言うだろう、複数行を記述することはできませんが、最終的にラインを終えることはできませんバックスラッシュ
バックスラッシュの特別な使用は:Daquanの基本JS
文字列は文字の配列に相当し、あなたは、角括弧内の数字を使用することができます演算子、数値、文字列か、角括弧内の数の長さよりも大きい場合、未定義返され、位置番号を返す
長さのプロパティを:文字列の長さは、メソッドを読み出すことができ、この方法は、書き換え不可能な
文字セットを:JavaScriptはUnicode文字セットを使用します。内部JavaScriptエンジンは、すべての文字は、Unicodeで表現されています。JavaScriptはUnicode文字を格納するだけではありませんが、また、直接プログラムでのUnicodeコードポイントの使用は文字を表し、文字がxxxxは、文字のUnicodeコードポイントを表しuXXXXという\、の形で書かれようとしていることができます。たとえば、\著作権記号の代わりにu00A9。
彼らは常に2つの文字である10FFFF間の文字は、JavaScriptのコードポイントU + U + 10000(長さ属性である2)。治療はつまり、これを考慮に入れなければならないときに、JavaScriptは文字列の長さが正しくない可能性が返されます。
BASE64トランスコーディング:任意の値に特殊文字の問題を回避するために0-9、AZ、AZ、+、 /、 64文字の
値は任意のBase64に変換したbtoa()
元の値へのatoB()BASE64
しかしながら、これらの2つの方法が適用可能なASCII値、Base64でのASCII追加する中間トランスコード処理に変換されていない
Daquanの基本JS
被験体を
キーの名前は、識別名の条件を満たしていない場合は、およびでない数(例えば、最初のものは、スペース、数字、またはオペレータである)、それは、引用符および追加するには、この時エラーになる
Daquanの基本JS
オブジェクトへの参照を:
別の変数名を指している場合つまり、1の値を変更し、同じアドレスを指すようになります、他の値が変更されます同じオブジェクト、
Daquanの基本JS
しかし、変数オブジェクトの元の名前への参照を削除する場合は、他のオブジェクトは変更されません
Daquanの基本JS
:式またはステートメントを
始めた場合中括弧は、ある括弧とその上にオブジェクトが必要な場合ならば、コードブロックである
Daquanの基本JS
プロパティ
属性が読み:ブラケット演算子は、そうでない場合は変数として扱われます、建明のために引用されなければならない場合は
Daquanの基本JS
、キー名の値が使用されていませんドット演算子、それ以外の場合はエラーになり、唯一の角括弧演算子を使用することができます
Daquanの基本JS
Object.keysの方法は、オブジェクトのすべてのプロパティを表示するには
Daquanの基本JS
、属性を削除します。
削除オブジェクトのプロパティを削除するには、削除後の時間の適用をtrueを返す、削除しないでくださいプロパティもtrueを返しますが存在し、それが本当のリターンを応じていない、オブジェクトの属性があると判定され、のみ 属が存在し、それがfalseを返したときに削除することはできません。同時に、唯一、自分の財産を削除することができ、あなたが継承されたプロパティを削除することはできません
Daquanの基本JS
演算子に
存在する場合、オブジェクトはtrueを返しますする性質があるかどうかを判断するが、この方法は、することはできません判決自体またはプロパティが継承されている
Daquanの基本JS
オブジェクトのすべてのプロパティをループにするために、彼はオブジェクトは、継承を横断する、オブジェクトが横断することができない、とだけ自分の財産を通過するわけではないオブジェクトトラバースされていない横断できトラバース時間に、使用hasOwnPropertyを方法を組み合わせなければならないため...プロパティは、プロパティは、オブジェクト自体のプロパティである場合、何を決定するために、内部ループで、使用します。Daquanの基本JS
声明で
Daquanの基本JS
変数への代入と内部ブロックがある場合は、それ以外の場合は、グローバル変数の現在のスコープを作成し、すでに存在している現在のオブジェクトの属性でなければなりません。
Daquanの基本JS
アレイ
のアレイに配置することができる任意のタイプのデータ、
lengthプロパティの
配列の長さのプロパティが書き込み可能である、長さの変化が増減配列の長さを0に設定する配列の長さ、空の配列を使用することができてもよく、配列の長さは、元のセット場合よりも大きいです配列の長さは、その後、位置が新しい位置は、オブジェクトの性質が配列され、未定義返します、余分なスペースが追加されます、人工的配列の長さを変えずに、属性の配列を追加することが可能であるDaquanの基本JS
オペレータに
キー名をテストアレイ内の、それがオブジェクトに適用されるだけでなく、アレイに存在するか否かを
ループと配列トラバーサルにするため*
数字キーの配列を横断するだけでなく、非数値キーの配列を介して
ループするため、ならびにアレイ内のwhileループを使用することが推奨されますまたはメソッドのforeach

<body>
<p>点击按钮计算数组所有元素相加的总和。</p>
<button onclick="numbers.forEach(myFunction)">点我</button>
<p>数组元素总和:<span id="demo"></span></p>
<script>
var sum = 0;
var numbers = [65, 44, 12, 4];
function myFunction(item) {
    sum += item;
    demo.innerHTML = sum;
}
</script>//数组元素总和:125

数组的空位
数组的空位是可以读取的,并且返回undefined,同时数组的空位在forEach,for in,以及Object.keys的方法遍历的过程中会跳过,但是如果某个位置是undefined在遍历的过程中就不会被跳过。
类数组的方法
slice可以将类似数组的方法变成真正的数组
var arr = Array.prototype.slice.call(arrayLike);
通过call可以把数组的方法加在对象上面
Daquanの基本JS
函数
函数可以调用自身,就是递归
变量提升:
如果采用function和赋值语句同时调用同一个语句,最终会采用赋值语句的方法
Daquanの基本JS
不能在条件语句中声明代码块,但能运行
Daquanの基本JS
函数的属性和方法
name属性:返回函数的名字,也可以返回函数参数的名字
Daquanの基本JS

length
函数的length属性返回函数预期传入的参数个数,length属性提供了一种机制,判断定义时和调用时参数的差异,以便实现面向对象编程的”方法重载
tostring
返回一个字符串,内容是函数的源码
Daquanの基本JS
*函数的参数
函数的length属性是只读属性,代表函数形参的数量,也就是在函数定义时给出的形参个数。需要注意的是,函数的length属性与实际传入的参数个数无关,只反映函数预期传入的参数个数。
没有办法只省略靠前的参数,而保留靠后的参数。如果一定要省略靠前的参数,只有显式传入undefined。

function f(x,y){}
f.length  //2

函数的传递
原始类型的值(数值、字符串、布尔值),传递方式是传值传递(在函数体内修改参数值,不会影响到函数外部。)
参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(内部修改参数,将会影响到原始值。)
注意!如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
Daquanの基本JS
*arguments 对象
实参对象,只在函数内部使用
通过arguments的length属性可以知道函数在调用的时候到底带几个参数
与数组的关系:虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。如果要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组。两种常用的转换方法:slice方法和逐一填入新数组。
callee 属性:arguments对象带有一个callee属性,返回它所对应的原函数。Daquanの基本JS
闭包:
1.读取函数内部的变量,并让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。
Daquanの基本JS
2.封装对象的私有属性和私有方法。
Daquanの基本JS
注意,外层函数每次运行,都会生成一个新的闭包,而这个闭包又会保留外层函数的内部变量,所以内存消耗很大。因此不能滥用闭包,否则会造成网页的性能问题。
eval 把字符串当成语句来执行放在eval中的字符串有独立存在的意义,不能放在eval之外使用,他没有自己的作用域,都在当前的作用域因此可能会修改当前作用域的值

eval('var a=1');
a  //1

与eval相类似的Daquanの基本JS

JavaScript规定,如果使用严格模式,eval内部声明的变量,不会影响到外部作用域。

(function(){
  'use strict';
  eval('var a=1');
  console.log(a);  //ReferenceError: a is not defined
})();

运算符
Daquanの基本JS
数值运算符:可以将任何值都转化为数值和number的属性相同
Daquanの基本JS
字符串的比较:
在比较字符串的时候,首先比较字符串第一个字符的Unicode码点,如果相等,就比较第二个,以此类推
非字符串的值
原始类型的值:先转化成数值再比较
对象:如果运算子是对象,会转化为原始类型的值,在进行比较
对象转化为原始类型的值,算法是先调用valueof的方法,如果返回的还是对象,再调用tostring方法
(3)undefined == null // true; undefined === null //false
逗号运算符
逗号运算符用于对两个表达式求值,并返回后一个表达式的值。
数据类型转换
强制转换
number()将任意值转化为数值
参数为原始类型的值,只要有一个字符无法转换,就会返回NaN,当参数为对象时,会返回NaN,除非是包含单个数字的数组
Daquanの基本JS
string()
原始类型的值转换:数值转化为相应的字符串
字符串转化为原来的值,布尔值:true转为字符串"true",false转为字符串"false"。undefined:转为字符串"undefined"。null:转为字符串"null"。String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。
boolean():undefined,null,NaN,"",0这五个值会转化为false
所有对象(包括空对象)的转换结果都是true,甚至连false对应的布尔对象new Boolean(false)也是true
Daquanの基本JS
自动转换:!! expression
对象类型转换:
valueof:valueOf()方法。如果存在任意原始值,它就默认将对象转换为表示它的原始值;对象是复合值,而大多数对象无法真正表示为一个原始值,因此默认的valueOf()方法简单地返回对象本身,而不是返回一个原始值
undefined和null没有valueOf()方法

undefined.valueOf();//错误
null.valueOf();//错误

布尔型数据true和false返回原值。布尔型数据的包装对象返回true或false

true.valueOf();//true
typeof true.valueOf();//'boolean'
false.valueOf();//false
typeof false.valueOf();//'boolean'
Boolean.valueOf();//Boolean() { [native code] }
typeof Boolean.valueOf();//'function'

字符串类型原值返回。字符串类型的包装对象返回字符串值
数值类型分为整数和浮点数进行处理。数值类型的包装对象返回数值类型值
整数直接跟.valueOf()形式,会报错,提示无效标记,因为整数后的点被识别为小数点,所以尽量加括号

0.valueOf();//Uncaught SyntaxError: Invalid or unexpected token
(0).valueOf();//0
+0.valueOf();//Uncaught SyntaxError: Invalid or unexpected token
(+0).valueOf();//0
-0.valueOf();//Uncaught SyntaxError: Invalid or unexpected token
(-0).valueOf();//-0

浮点数原值返回

1.23.valueOf();//1.23
+1.23.valueOf();//1.23
-1.23.valueOf();//-1.23
NaN.valueOf();//NaN
Infinity.valueOf();//Infinity
-Infinity.valueOf();//-Infinity

对象Object类型及自定义对象类型返回原对象

{}.valueOf();//报错,Unexpected token .
({}).valueOf();//Object{}
typeof ({}).valueOf();//'object'
({a:123}).valueOf();//Object{a:123}
Object.valueOf();//Object() { [native code] }
typeof Object.valueOf();//'function'

函数Function类型返回原函数


function test(){
    alert(1);//1
}
test.valueOf();/*function test(){
                    alert(1);//1
                  }*/
Function.valueOf();//Function() { [native code] }

tostring
undefined和null没有toString()方法
布尔型数据true和false返回对应的'true'和'false'
字符串类型原值返回
1、正浮点数及NaN、Infinity加引号返回

1.23.toString();//'1.23'
NaN.toString();//'NaN'
Infinity.toString();//'Infinity'

  2、负浮点数或加'+'号的正浮点数直接跟上.toString(),相当于先运行toString()方法,再添加正负号,转换为数字

+1.23.toString();//1.23
typeof +1.23.toString();//'number'
-1.23.toString();//-1.23
typeof -1.23.toString();//'number'

  3、整数直接跟上.toString()形式,会报错,提示无效标记,因为整数后的点会被识别为小数点

0.toString(); //キャッチされないでSyntaxError:無効または予期しないトークン

  従って、このような状況を回避するため、およびエラーに無効である、デジタルのtoStringを使用する場合()メソッドは、ブラケットを解決

(0).toString();//'0'
(-0).toString();//'0'
(+1.2).toString();//'1.2'
(-1.2).toString();//'-1.2'
(NaN).toString();//'NaN'

デジタル型のtoString()メソッドは、基数変換(基数)オプションパラメータを受信することができるこのパラメータが指定されていない場合、変換ルールが小数に基づいています。同様に、他の進数(範囲2-36)に変換することができます。

var n = 17;
n.toString();//'17'
n.toString(2);//'10001'
n.toString(8);//'21'
n.toString(10);//'17'
n.toString(12);//'15'
n.toString(16);//'11'

おすすめ

転載: blog.51cto.com/14419253/2435960