一白山中

自分を磨き、自分なりの幸せを追求しよう

JavaScriptイベント

イベントというのは、HTML要素上に発生する出来事である

JavaScriptで、イベントを呼び出せる

 

イベントは、ブラウザの処理かエンドユーザーの操作に分けられる

例えば、サイトページの読み込みが完了した

HTMLのinputタグが変えた

HTMLのボタンがクリックされた

 

イベントが呼び出されると、何等かの処理を実施することができる

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<button onclick="getElementById('demo').innerHTML=Date()">今何時?</button>
<p id="demo"></p>

</body>
</html>

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<button onclick="this.innerHTML=Date()">今何時?</button>

</body>
</html>

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>ボタンクリックして、 <em>displayDate()</em> 関数を実施する</p>
<button onclick="displayDate()">ここクリックしてください</button>
<script>
function displayDate(){
    document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>

</body>
</html>

 

イベントはバリデーションチェック、エンドユーザー入力、エンドユーザー操作、ブラウザ動作などに利用することができる

サイトページ読み込みするときに、イベントを呼び出す

サイトページが閉じられるときのも

エンドユーザーがボタンをクリックしたときも

エンドユーザーが入力したフォームの内容チェックなど

 

JavaScriptイベント実行させる方法としては、

HTMLのイベント属性で、そのままJavaScriptソースを実施させることはできる

また、JavaScript関数を呼びして、処理を行う

 

定番のイベント

イベント 詳細
onchange HTML 要素変更されるとき
onclick エンドユーザーが HTML 要素をクリックするとき
onmouseover エンドユーザーがHTML要素上にマウスでコンソールを移動させるとき
onmouseout  エンドユーザーがHTML要素上からマウスでコンソールを離れるとき
onkeydown エンドユーザーがキーボードのキーを押下したとき
onload ブラウザがサイトページを読み込み完了後

JavaScriptネームスコープ

ネームスコープとは、アクセスできる変数の集合である

JavaScriptにて、オブジェクト及び関数も変数であるので、ネームスコープは、アクセスできるオブジェクト、関数、変数の集合である

 

関数内部で生成した変数のネームスコープはその関数内部だけになる

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>関数内部変数だから、関数の外では利用できない</p>
<p id="demo"></p>
<script>
myFunction();
document.getElementById("demo").innerHTML = "carName のデータ型は" +  typeof carName;
function myFunction() 
{
    var carName = "Volvo";
}
</script>

</body>
</html>

 

一方、関数外の変数ですと、サイトのすべてscript及び関数で利用できる

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>関数外の変数は、すべてのscript及び関数内部でも利用できる</p>
<p id="demo"></p>
<script>
var carName = "Volvo";
myFunction();
function myFunction() 
{
    document.getElementById("demo").innerHTML =
        "出力 " + carName;
}
</script>

</body>
</html>

 

そして、関数内部でも、全体的に利用できる変数を生成することは可能である

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>
最初から変数宣言しなかったら、すべてのところで利用できる変数になる:
</p>
<p id="demo"></p>
<script>
myFunction();
document.getElementById("demo").innerHTML =
    "出力 " + carName;
function myFunction() 
{
    carName = "Volvo";
}
</script>

</body>
</html>

 

関数内部生成した変数は、関数実行される際に生成され、関数処理後に処分される。関数外部の変数は、サイト閉じられたときに処分される。

 

関数の引数は、関数内部だけ利用できる。

 

関数外部変数は、全部windowオブジェクトの属性になる

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>
HTMLにて、すべての関数外部変数は、window の変数になる
</p>
<p id="demo"></p>
<script>
myFunction();
document.getElementById("demo").innerHTML =
    "出力 " + window.carName;
function myFunction() 
{
    carName = "Volvo";
}
</script>

</body>
</html>

 

まとめ、

ローカル変数:関数内部で、var経由で生成した変数

グローバル変数:関数外部で、var経由で、生成した変数

宣言してなかった変数は、グローバル変数になる

 

letとvarの区別

function varTest() {
  var x = 1;
  if (true) {
    var x = 2;  // 同じ変数
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

function letTest() {
  let x = 1;
  if (true) {
    let x = 2;  // 違う変数
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

JavaScript関数2

関数は、イベントまた呼び出されると、繰り返し利用できるソースの塊である

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>テスト事例</title>
<script>
function myFunction()
{
    alert("Hello World!");
}
</script>
</head>
 
<body>
<button onclick="myFunction()">クリックしてください</button>
</body>
</html>

 

関数フォーマット

function(キーワード) functionname()
{
    // 実行ソース(関数そのもの)
}

 

関数名には、大文字小文字を区別に認識する

 

引数持つ関数の利用

<!DOCTYPE html>
<html>    
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>このボタンをクリックして、引数必要な関数を利用する</p>
<button onclick="myFunction('Harry Potter','Wizard')">ここクリックしてください</button><!--関数利用する際には、引数を順番正しく指定すべきである-->
<script>
function myFunction(name,job){ //関数定義する際にも、引数を順番的に指定する必要がある
    alert("Welcome " + name + ", the " + job);
}
</script>

</body>
</html>

 

戻り値がある関数

return キーワードで実現できる。実施されると、関数の処理が中止される。

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>この例で利用される関数は、計算を行い、結果を返す</p>
<p id="demo"></p>
<script>
function myFunction(a,b){
    return a*b;
}
document.getElementById("demo").innerHTML=myFunction(4,3);
</script>

</body>
</html>

 

sayHi();
function sayHi(name,message){
    document.write("return 文実行する前");
    return;
    alert("hello" + name +"," + message);//この行の処理は実行されない
}

ある条件で、関数をただ中断することもできる

function myFunction(a,b)
{
    if (a>b)
    {
        return;
    }
    x=a+b
}

 

関数内部の変数は、関数内部だけで有効で、関数処理完了後に処分される。ですので、違う関数の中には同じ名前の変数でOKである。

一方、関数外にある変数はすべてのjavascript処理に利用されることは可能である。

変数の生成時間は、宣言されたときにある。終了時間は、関数内部の分は関数処理完了後にあり、関数外部の分は、サイトが閉じられたときにある。

宣言されてない変数に値を付与すると、window の一つ属性としてみられる。

var var1 = 1; 
var2 = 2; 

console.log(this.var1); // 1
console.log(window.var1); // 1
console.log(window.var2); // 2

delete var1; // false 削除できない
console.log(var1); //1

delete var2; 
console.log(delete var2); // true
console.log(var2); // 削除したので、未定義のエラーになる

 

シンプル計算機

var result_1;
//+
function add() {alert(1);
  var a = getFirstNumber();
  var b = getTwiceNumber();
  var re =Number( a) +Number( b);
  sendResult(re);
}

//-
function subtract() {
  var a = getFirstNumber();
  var b = getTwiceNumber();
  var re = a - b;
  sendResult(re);
}

//*
function ride() {
  var a = getFirstNumber();
  var b = getTwiceNumber();
  var re = a * b;
  sendResult(re);
}

// /
function devide() {
  var a = getFirstNumber();
  var b = getTwiceNumber();
  var re = a / b;
  sendResult(re);
}

//pタグに値賦与
function sendResult(result_1) {
  var num = document.getElementById("result")
  num.innerHTML = result_1;
}

//最初の数字を獲得
function getFirstNumber() {
  var firstNumber = document.getElementById("first").value;
  return firstNumber;
}

//二番目の数字を獲得する
function getTwiceNumber() {
  var twiceNumber = document.getElementById("twice").value;
  return twiceNumber;
}

<p>シンプル計算機</p>
<table border="1" style="position:center;">
  <tr>
    <td>最初の数字:</td>
    <td><input type="text" id="first"/></td>
  </tr>
  <tr>
    <td>二番目の数字:</td>
    <td><input type="text" id="twice"/></td>
  </tr>
  <tr>
    <td colspan="2" >
      &nbsp;
      <button style="width:inherit" onclick="add()">+</button>
      &nbsp;
      <button style="width:inherit" onclick="subtract()">-</button>
      &nbsp;
      <button style="width:inherit" onclick="ride()">*</button>
      &nbsp;
      <button style="width:inherit" onclick="devide()">/</button>
    </td>
  </tr>
  <tr>
    <td colspan="2" rowspan="2">
      <p id="result"></p>
    </td>
  </tr>
</table>

 

チェックボックスの事例

読書:<input type="checkbox" name="checkbox" value=1><br>
書く:<input type="checkbox" name="checkbox"value=2><br>
スマホ見る:<input type="checkbox" name="checkbox"value=3><br>
ゲームする:<input type="checkbox" name="checkbox"value=4><br>
<button onclick="checkboxed('checkbox')">すべてチェック</button>
<button onclick="uncheckboxed('checkbox')">すべて取り消し</button>

function checkboxed(objName){
    var objNameList=document.getElementsByName(objName);    

    if(null!=objNameList){
        alert("すべてチェック操作");
        for(var i=0;i<objNameList.length;i++){
            objNameList[i].checked="checked";
        }
    }
}

function uncheckboxed(objName){
    var objNameList=document.getElementsByName(objName);    

    if(null!=objNameList){
        alert("すべて取り消し操作");
        for(var i=0;i<objNameList.length;i++){
            objNameList[i].checked="";
        }
    }
}

 

上記機能を一つボタンで実現する

読書:<input type="checkbox" name="checkbox" value=1><br>
書く:<input type="checkbox" name="checkbox"value=2><br>
スマホ見る:<input type="checkbox" name="checkbox"value=3><br>
ゲームする:<input type="checkbox" name="checkbox"value=4><br>
<button onclick="allcheck()">すべてチェックする/取り消し</button>

var checkAll = false;
function allcheck(){
    checkAll = !checkAll;
    let inputs = document.getElementsByName('checkbox')
    for(var i =0;i<inputs.length;i++){inputs[i].checked = checkAll}
}

上記debugした後

var checkAll = false;
function allcheck() {
    let inputs = document.getElementsByName('checkbox');
    var checkInt = 0;
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            checkInt += 1;
        }
    }
    if (checkInt == inputs.length) {
        checkAll = false;
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].checked = checkAll
        }
    } else {
        checkAll = true;
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].checked = checkAll
        }
    }
}

 

簡潔バージョン

var checkAll = false;
function allcheck(){
    checkAll = !checkAll;
    let inputs = document.getElementsByName('checkbox')
    for(var i=0;i<inputs.length-1;i++){
      if (inputs[i].checked==inputs[i+1].checked){
            if (i==inputs.length-2){
                if(inputs[i].checked==true){
                    checkAll=false;
                }else checkAll=true;
            }
      } 
    }
    for(var i =0;i<inputs.length;i++){inputs[i].checked = checkAll}
}

 

さらに簡潔する

var checkAll = false;
function allcheck(){
    checkAll = !checkAll;
    let inputs = document.getElementsByName('checkbox')
    for(var i =0;i<inputs.length;i++){
        for (var j = 0; j < inputs.length; j++) {//すでにすべてチェックかどうかの確認
            if (inputs[j].checked == true) {
                checkAll = false;
            }else{
                checkAll = true;
                continue;
            }
        }
        
        inputs[i].checked = checkAll;
    }
}

さらにさらに簡潔

function allcheck(){
    var checkFlag = false;    //ディフォルト操作はすべて取り消し
    var inputs = document.getElementsByName('checkbox');
    for(var i = 0; i < inputs.length; i++) {
        if(!inputs[i].checked) {    //もし、チェックしてない状態ですと、すべてチェック実行する
            checkFlag = true;
            break;    //つけると処理時間短縮できるが、結果に影響しない
        }
    }
    for(var i = 0; i < inputs.length; i++) {
        inputs[i].checked = checkFlag;
    }
}

 

最終の簡潔

読書:<input type="checkbox" name="checkbox" value=1><br>
書く:<input type="checkbox" name="checkbox"value=2><br>
スマホみる:<input type="checkbox" name="checkbox"value=3><br>
ゲームする:<input type="checkbox" name="checkbox"value=4><br>
<input type="button" value="すべてチェック" onclick="allcheck(this)">
<script>
var checkAll = false;
function allcheck(element){
    checkAll = !checkAll;
    element.value=checkAll?"すべて取り消し":"すべてチェック";
    let inputs = document.getElementsByName('checkbox') 
    for( var index in inputs){
        inputs[index].checked = checkAll;
    }
}
</script>

上記を踏まえて、逆チェックの追加

読書:<input type="checkbox" name="checkbox" value=1><br>
書く:<input type="checkbox" name="checkbox"value=2><br>
スマホ見る:<input type="checkbox" name="checkbox"value=3><br>
ゲームする:<input type="checkbox" name="checkbox"value=4><br>
<button onclick="opcheckboxed('checkbox', 'checkall')">すべてチェック</button>
<button onclick="opcheckboxed('checkbox', 'uncheckall')">取り消し</button>
<button onclick="opcheckboxed('checkbox', 'reversecheck')">逆チェック</button>

function opcheckboxed(objName, type){
  var objNameList=document.getElementsByName(objName);
  if(null!=objNameList){
    for(var i=0;i<objNameList.length;i++){  
      if(objNameList[i].checked==true)
      {
        if(type != 'checkall') {  // すべてチェックじゃなければ
          objNameList[i].checked=false;
        }
        
      } else {
        if(type != 'uncheckall') {  // 取り消しじゃなければ
          objNameList[i].checked=true;
        }
      }
    }  
  }
}

ES6の新形式、⇒関数

// 通常の関数形式
function Test () {
  //
}

const Test = function () {
  //
}

// ⇒定義形式ですと、 function キーワードを省略できる
const Test = (...params) => {
  //
}

// 一つの引数だけですと、下記の簡潔記載でOK
const Test = param => {
  return param;
}

console.log(Test('hello'));   // hello

JavaScriptオブジェクト

JavaScriptにて、オブジェクトというのは、「属性」と「メソッド」を所持するデータのことである

 

生活の例で、考えると、「車」は一つのオブジェクトである

 

属性としては、下記ものがある

car.name = Fiat

car.model = 500

car.weight = 850kg

car.color = white

 

メソッド(処理)としては、以下である

car.start()

car.drive()

car.brake()

car.stop()

 

すべての車には、上記属性ありながら、それぞれ違うし、メソッドもあるが、実行されるタイミングが違う

 

JavaScriptにて、複数データが入っている変数として、考えてもいい

 

普通変数→var car = "Fiat";

オブジェクト→var car = {name:"Fiat", model:500, color:"white"};

 

ソース例を見てみると、

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>JavaScript オブジェクト生成</p>
<p id="demo"></p>
<script>
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
document.getElementById("demo").innerHTML =
    person.firstName + " 今" + person.age + " 歳である";
</script>

</body>
</html>

 

見栄えをきれいにする書き方としては、

<script>
var person = {
    firstName : "John", //各属性の間は、「,」は絶対必要である
    lastName  : "Doe",
    age       : 50,
    eyeColor  : "blue"
};
document.getElementById("demo").innerHTML =
    person.firstName + " 今" + person.age + " 歳である";
</script>

 

オブジェクトはデータの容器で、「name : value 」の形で、表現される

そのデータを利用方法としては、下記ソースを参照してください

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>
オブジェクトの属性を利用する方法が二つある
</p>
<p>
 .property または ["property"]という形で
</p>
<p id="demo"></p>
<script>
var person = {
    firstName : "John",
    lastName : "Doe",
    id : 5566
};
document.getElementById("demo").innerHTML =
    person.firstName + " " + person.lastName;
</script>

</body>
</html>

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>
オブジェクトの属性を利用する方法が二つある
</p>
<p>
 .property または ["property"]という形で
</p>
<p id="demo"></p>
<script>
var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566
};
document.getElementById("demo").innerHTML =
    person["firstName"] + " " + person["lastName"];
</script>

</body>

 

「name : value 」のnameが文字列で、valueには、nullでも、undefinedでもOK

var bird = {
    name : "Amy",
    age : 1,
    color : "white",
    skill : function () {
        console.log("Fly");
    },
    nickname : null, 
    play : undefined 
}

 

メソッドは関数のようなもので、オブジェクトに保管される

利用する方法は、関数と同じ()つければOK

ソース例は以下である

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>オブジェクトメソッド生成して利用</p>
<p>オブジェクトメソッドは関数として、定義して、オブジェクト属性として保管</p>
<p id="demo"></p>
<script>
var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566,
    fullName : function() 
    {
       return this.firstName + " " + this.lastName;
    }
};
document.getElementById("demo").innerHTML = person.fullName();
</script>
    
</body>
</html>

 

もし実行命令()つけずに、出力すると、関数定義そのものが呈示される

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title> 
</head>
<body>

<p>オブジェクトメソッド生成して利用</p>
<p>オブジェクトメソッドは関数として、定義して、オブジェクト属性として保管</p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566,
    fullName : function() 
    {
       return this.firstName + " " + this.lastName;
    }
};
document.getElementById("demo1").innerHTML = "()つけずに、関数定義を出力"  + person.fullName;
document.getElementById("demo2").innerHTML = "()つけると、関数実行結果を出力"  +  person.fullName();
</script>
    
</body>
</html>

 

先にオブジェクト宣言する方法もある

var person=new Object();
person.name='太郎';
person.sex='男';
person.method=function(){
  return this.name+this.sex;
}

 

属性及びメソッドの名前は唯一性があり、最後に賦与される値が保存される

var person = {
    name: "太郎",
    age: 18,
    sex: "男",
    play: "football",
    play: function () {
        return "like paly football";
    }
};

結局playがメソッドになる

JavaScriptデータ型

値の類で、文字列(String)、数字(Number)、真偽(Boolean)、空っぽ(Null)、未定義(Undefined)、Symbol(ES6から追加された型で、唯一無二のデータを表す)

 

データ引用の類で、オブジェクト(Object)、配列(Array)、関数(Function)

 

※型の変動は可能である

var x;               // x → undefined
var x = 5;           // 今の x → 数字
var x = "John";      // 今の x → 文字列

 

※文字列 「'」 または「"」で括る

var carname="Volvo XC60";
var carname='Volvo XC60';

 

もちろん、文字列には「'」 または「"」利用可能である

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<script>
var carname1="Volvo XC60";
var carname2='Volvo XC60';
var answer1='It\'s alright';
var answer2="He is called \"Johnny\"";
var answer3='He is called "Johnny"';
document.write(carname1 + "<br>")
document.write(carname2 + "<br>")
document.write(answer1 + "<br>")
document.write(answer2 + "<br>")
document.write(answer3 + "<br>")
</script>

</body>
</html>

 

※数字

var x1=34.00;      //小数点もOK
var x2=34;         //

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<script>
var x1=34.00;
var x2=34;
var y=123e5;
var z=123e-5;
document.write(x1 + "<br>")
document.write(x2 + "<br>")
document.write(y + "<br>")
document.write(z + "<br>")
</script>

</body>
</html>

 

※真偽値

var x=true;
var y=false;

 

※配列

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

または、

var cars=new Array("Saab","Volvo","BMW");

 

<!DOCTYPE html>
<html>
<body>

<script>
var i;
var cars = new Array();
cars[0] = "Saab";
cars[1] = "Volvo";
cars[2] = "BMW";

for (i=0;i<cars.length;i++)
{
document.write(cars[i] + "<br>");
}
</script>

</body>
</html>

 

※オブジェクト

var person={firstname:"John", lastname:"Doe", id:5566};

 

or

var person={
firstname : "John",
lastname  : "Doe",
id        :  5566
};

 

使い方

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<script>
var person=
{
    firstname : "John",
    lastname  : "Doe",
    id        :  5566
};
document.write(person.lastname + "<br>");
document.write(person["lastname"] + "<br>");
</script>

</body>
</html>

 

※Undefined と Null

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<script>
var person;
var car="Volvo";
document.write(person + "<br>");
document.write(car + "<br>");
var car=null
document.write(car + "<br>");
</script>

</body>
</html>

 

※データ型を最初に定義できる

var carname=new String;
var x=      new Number;
var y=      new Boolean;
var cars=   new Array;
var person= new Object;

因みに、すべての変数は一つのオブジェクトである

 

配列操作

var arr1 = new Array('a', 'b', 'c');    
var arr2 = ['a', 'b', 'c' ];       //より簡潔
var arr3 = new Array( );   var arr4 = [ ];     //空っぽ配列作成
添え字に対する操作は要注意

 

オブジェクト操作

var people = {name : 'Tom', age : 21 , eat : function(){  }    }

or

var people = new Object();
people.name = 'Tom';   
people.age = 21;  
people.eat = function(){  }

 

function Demo(){
    var obj=new Object();
    obj.name="太郎";
    obj.age=12;
    obj.firstF=function(){
    }
    obj.secondF=function(){
    }
    return obj;
}

var one=Demo();
// 出力
document.write(one.age);

または:

function Demo(){
    this.name="太郎";
    this.age=12;
    this.firstF=function(){
    }
    this.secondF=function(){
    }
}

var one=new Demo

// 出力
document.write(one.age);

 

※配列確認

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
document.write(typeof cars); // object

 

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
// 関数利用可能かの確認
if (Array.isArray) {
    if(Array.isArray(cars)) {
        document.write("該当対象は配列である") ;
    }
}

 

または

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

if (cars instanceof Array) {
    document.write("該当対象は配列である") ;
}

 

※nullとundefinedの出力

var x,y;
if(x == null){
    document.write(x);
}
if(y == undefined){
    document.write(y);
}

 

※基本変数とメモリの関係

var a,b;
a = "zyj";
b = a;
console.log(a);   // zyj
console.log(b);   // zyj
a = "はは";       // aの値を変えるが、 b に影響しない
console.log(a);   // はは
console.log(b);   // zyj

 

※オブジェクトとメモリの関係

var a = {name:"percy"};
var b;
b = a;
a.name = "zyj";
console.log(b.name);    // zyj
b.age = 22;
console.log(a.age);     // 22
var c = {
  name: "zyj",
  age: 22
};

 

※ toString()で数字から文字列へ変換可能である

<script>
var a=100;
var c=a.toString();
alert(typeof(c));      //typeof()で確認
</script>
parseInt() と parseFloat() で文字列を数字まで変換できる

<script>
var str="123.30";
var a=parseInt(str);    //parseInt()は文字列から整数まで、parseFloat()は小数まで
var b=parseFloat(str);
</script>
真偽値までの変換は、値の前に 「!!」つければOK、!!0 は False、そのほかは True

JavaScript関数

後で定義される関数は、前のを覆す

function
test() { console.log("test"); } test(); // "test arg0 + undefined" 出力 function test(arg1) { console.log("test arg" + arguments.length + " + " + arg1); } test(1,2); // "test arg2 + 1" 出力

足りない引数は、undefinedになる
多めの引数は、argumentsで取り出す可能である

function
test(arg1) { for(var i=0; i<arguments.length; i++) { console.log(arguments[i]); } } test(1,2); // 1 2 出力
変数と関数が重複する際には、変数が勝ち

var
a = 100; function a() { return "function"; } console.log(a); // 100 出力 console.log(a()); /* エラー Uncaught TypeError: a is not a function (anonymous function) @test.html:9 */

匿名関数

var
a = 100; var a = function() { return "function"; } console.log(a); /* function() { return "function"; }
出力 */
console.log(a()); // "function" 出力

関数とそのうちの変数と重複する場合

function
a() { console.log(this); // window{...} 出力 this.a = 1; //いわゆる window.a = 1,この時のwindowもとのfunction aが変数で覆される var a = 5; //下記の変数は全部{}範囲内で有効である a = 10; var v = "value" return "function"; } console.log(a); // function a {...} 出力 console.log(a()); // "function" 出力 console.log(a); // 1 出力 console.log(v); /* Uncaught ReferenceError: v is not defined (anonymous function) @ mycolor.html:15 */
出力

JavaScript変数

アルファベットから開始する

$ 及び _ 記号からスタートしてもOKですが、薦めはしない

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<script>
var pi=3.14;

// ES6に詳しい人ですと、piに対して、const キーワード利用可能です。定数を表す
// const pi = 3.14;
var name="Bill Gates";
var answer='Yes I am!';
document.write(pi + "<br>");
document.write(name + "<br>");
document.write(answer + "<br>");
</script>

</body>
</html>

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<p>クリックして、変数を作って、利用する</p>
<button onclick="myFunction()">ここクリックしてください</button>
<p id="demo"></p>
<script>
function myFunction(){
    var carname="Volvo";
    document.getElementById("demo").innerHTML=carname;
}
</script>

</body>
</html>

 

※下記の形式でもOK

var lastname="Doe", age=30, job="carpenter";

 

var lastname="Doe",
age=30,
job="carpenter";

 

var x,y,z=1;

 

※var carname;のように、変数生成したが、値代入しないと、そのまま利用すると、

 undefinedになる(よくあるミスである)

 

※再度生成しても、値が保留される

var carname="Volvo";
var carname;

ただし、下記の場合は、値が更新される

var a = 1;
var a = 'x';
console.log(a);
// 输出 'x'

 

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>一白山中(ennya.hatenablog.com)</title>
</head>
<body>

<p>もし y=5、x=y+2を計算する。結果を表示する</p>
<button onclick="myFunction()">クリックしてください</button>
<p id="demo"></p>
<script>
function myFunction(){
    var y=5;
    var x=y+2;
    var demoP=document.getElementById("demo");
    demoP.innerHTML="x=" + x;
}
</script>

</body>
</html>

 

※2015 年以前、 varキーワードで、変数を生成する

2015年以降の JavaScript バージョン(ES6)にて、constキーワードで、定数を生成することと let キーワードで、変数生成することを許可された

 

※const(定数)

//定数a生成、値0を付与する
const a = 0;

//エラー(別値代入NG)
a = 1;

//エラー(再度生成してはいけない)
const a = 2;

//0を出力
console.log("a is: " + a);

 

※varとletの区別(適応範囲)

function varTest() {
    var x = 1;
    if (true) {
        var x = 2;       // 同じ変数!
        console.log(x);  // 2
    }
    console.log(x);  // 2
}

function letTest() {
    let x = 1;
    if (true) {
        let x = 2;       // 違う変数!    
        console.log(x);  // 2  
    }
    console.log(x);  // 1
}