未定義の不明な値 | Null |
|
|
jsの可変データ型は、プログラムの実行中のみ等号の右側の値に基づいて決定され、動的データ型
#とも呼ばれます。 #一般的なステートメント:
IsNAN() //判断值是否为非数字
//转义符: \n换行 \t缩进 \b空格
str.length //获取字符串长度
ログイン後にコピー
ちょっとした理論
- 未定義で数値を追加すると、結果は NaN
##null になります1 は 1 に等しい-
プロンプトから取得した値は文字型です。 プロンプト値の追加には、次のような追加ケースがあります。 :
//demo onevar a,
b
;a = parseInt(prompt('请输入第一个值'));
b = parseInt(prompt('请输入第二个值'));
var c = a + b;
alert (c);
//demo two
var a = prompt('请输入第一个值');
var b = prompt('请输入第二个值');
var c = Number(a) + Number(b);
alert (c);
ログイン後にコピー
文字列変換(クローム色は黒)
Variable.toString()
- String()強制変換
- 暗黙的な変換: スプライシング
- 文字列テンプレートのスプライシング
- 私の年齢は ${age} 歳です (バッククォートを削除しないように注意してください)
数値型変換 (クロム色は青)
Parselnt() は整数型に変換されます
- parseFloat() は浮動小数点型に変換されますpoint type
- Number () 強制変換関数
- 暗黙的変換: - * / 算術演算暗黙的変換
-
ブール変換(chrom colorは青)
空および負の - は false に変換されます: ''、0、NaN、null、未定義 残りはすべて true
Operator
==数値型のデフォルト変換は文字型を数値型に変換します
===一致、値が必要ですとデータ型が同じである必要があります
優先度:
ブラケット 単眼 (右から左へ結合した右) 算術*/% 変位 関係-
等しい-
ロジック&^| &&|| 代入 カンマ
選択ステートメント
if 何も言うことがない
- スイッチノート:
価値判断の場合は - all 操作待ち
判定
配列
配列の作成方法 1. new を使用して配列を作成します-
var arr = new Array() //注意的是,new A必须大写
var arr = new Array(2); //表示数据长度2
var arr = new Array(2, 3); //表示里面有两个元素是2和3
ログイン後にコピー
2. リテラルを使用して配列を作成します
3. 配列の長さを取得します
arr.length = (Number) メソッドを渡して配列の長さを変更することもできます。
注:
冗長アドレス/空のアドレス/のデフォルト値未定義の配列要素は未定義です C 言語を例に挙げると、デフォルトでは、文字配列は \0 で終わり、範囲外の添字はプログラム エラーを引き起こします。このような JS 設定の利点は、配列の長さが制限されることです。定義できない場合もあれば、アドレス空間を事前に指定することもできます。 - 4. インデックス/添字変数を定義する必要がないように配列の移行を実装します
newArry[new.Arry.length] = arr[i++];
ログイン後にコピー
よく使用される配列の組み込みオブジェクト
1. 配列の判定
// var arr = [];
arr instanceof Array //Instanceof运算符判断是否为数组
Array.isArray(arr) //isArray判断是否为数组
ログイン後にコピー
2. 配列要素を追加します
arr.push() //在数组最后添加一个或多个数组元素
arr.unshift() //在数组最前面添加一个或多个数组元素
ログイン後にコピー
実用的: プッシュは新しい空の配列に値を割り当てることができ、プッシュとアンシフトはどちらも新しい配列の長さである戻り値を持ちます。 array
3. 配列要素を削除します
arr.pop() //删除数组中最后一个元素
arr.shift() //删除数组中第一个元素
ログイン後にコピー
戻り値として、削除された要素の値が返されます
4. 反転/反転配列
5. 配列のソート
arr.sort() //对个位数进行冒泡排序
ログイン後にコピー
理論: バブル ソートは 1 桁で実行されると言われるのはなぜですか? ソートではまず配列を比較し、配列を文字列に変換するため、したがって、77 は 8 の前になりますが、比較関数 (compareFunction) があれば、必要に応じて配置できます
arr.sort solutionarr.sort(function(a,b)) {
return a - b;
//return b - a
ログイン後にコピー
a - b は昇順、b - a は降順 ソート
6. 配列を検索
arr.indexOf('word');
ログイン後にコピー
前から後ろへ インデックス番号を検索して返します。条件を満たす配列の最初の要素のインデックス番号を返します。見つからない場合は、1
arr.lastIndexOf('word');
ログイン後にコピー
後ろから前へ の最初の要素のインデックス番号を検索して返します。条件を満たす配列。見つからない場合は、-1
7. 文字列に変換
arr.toString() //数组转换成字符串
arr.join() //将数组转换成字符串,且括号内可以写分隔符,表示用什么符号格式进行分隔 arr.join('&')
ログイン後にコピー
引数疑似配列は関数内でのみ使用可能
データも添え字方式で格納されるため長さの定義は不要 仮引数受け取りの実装
関数
#宣言関数:
理论:
- 如果形参多于实参,按前取;如果有实参没有被传值,默认是undefined
- Return返回一个值,但是如果return[ ] 且有多个表达式以逗号隔开,那返回值会是整个[]的 所有 运算结果
- !!如果函数没有返回值,那么返回的是undefined !!
- 在函数内部直接赋值的变量属于全局变量
- 函数的形参是局部变量
- 块级作用域: {} (es6新增,其他版本在括号里面定
义的变量也能在外面调用)
- 作用域链:多个函数嵌套的时候会形成作用域链,子函数能访问父函数的块作用域
对象
- 什么是对象?
对象是一组无序的相关属性和方法的集合(字符串,数值,数组,函数)
在其他语言中,类似 >结构体 >字典
创建自定义对象和对象属性、对象方法:
- 字面量创建
var obj = {
name:'姓名',
age : 999,
//*方法*冒号后跟一个*匿名函数*
printf:function() {
console.log('hello world');
}
}
ログイン後にコピー
记忆方法↓:
- 直接给对象名、属性冒号跟值+语句结束逗号
- 方法用冒号
- 取值:对象名.属性名 or 对象名[‘属性名’]
- 调用对象方法: 对象名.方法名();
- new object
var obj = new Object();
obj.name = '李昂';
obj.age = 999;
obj.printf:function(){
console.log('hello world');
}
ログイン後にコピー
记忆方法↓:
- var对象名 = new Object (); 不加分号
- 对象名.属性 = 取值 + 分号
- 方法用冒号
- 取值:对象名.属性名 or 对象名[‘属性名’]
- 调用对象方法: 对象名.方法名();
3.构造函数
function Obj (Uname, Uage) {
this.name = Uname;
this.age = Uage;
this.printf = function(infoms){
console.log(infoms);
}
}
ログイン後にコピー
记忆方法↓:
- 类似函数声明,但是构造函数函数名首字母必须大写,this.属性
- 方法用等号
- 构造函数必须得有变量传值,构造函数的方法也必须有变量传值
- 调用构造函数 var 变量 = new 构造函数名(传递的值)
var myobj = new Obj('李昂', '999');//可以理解为创建了一个变量指定了构造函数
console.log(myobj.name);
console.log(myobj['age']);
obj.printf('hello world');
ログイン後にコピー
new的执行过程
new构造函数会在内存中创建一个空的对象
this就会指向刚才创建的对象
接着依次执行属性、方法,并返回
新循环遍历
For (变量 in 对象){
}
这里的变量是属性值做遍历
属性的值的输出:consolo.log(对象[变量]);
程序员在for in 的变量喜欢写Key或者i
一些可用内置对象:
Math.PI //求圆周率
Math.max()//返回最大数值(如果无值返回负无穷大)
Math.abc ()//取绝对值
Math.floor()//向下取整
Math.ceil()//向上取整
Math.round()//四舍五入(五特殊 往大了取)
ログイン後にコピー
- 返回一个随机浮点数【0,1)括号里不跟参数
↓ 扩展:得到自定义最大值和最小值中间的随机函数
Function getRandomInt(min, max) {
min = Math.ceil(min); //规范值语句 可省
max = Math.floor(max); //规范值语句 可省
return = Math.floor(Math.random() * (max - min + 1) + min);
ログイン後にコピー
- new Date()调用日期对象 不跟参数返回系统时间
(‘2021-10-10 8:00:00’)字符串输出
(2021, 10, 10)数字输出 月份从0开始11结束 故而要在月份的基础上+1
- 变量.getDay()获取当前星期,星期日从0开始 到星期六6结束 获取到的值是一个数字
↓规范获取当前时间 demo
var date1 = new Date;
var year = date1.getFunllYear();
var month = date1.getMonth();
var dates = date1.getDate();
var day = date1.getDay();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
alert('今天的日期是:' + year + '年' + (month+1) + '月' + dates + '日' + arr[day]);
ログイン後にコピー
==值得注意的是,必须使用变量调用Date这个构造函数
基本包装类型:
- 就是把简单数据类型包装成复杂数据类型,这样基本数据类型就有了属性和方法,那么一般来说在浏览器里面JS引擎会自动帮我们把简单数据类型包装成复杂数据类型
var str = 'lion';
console.log(str.length);
//JS如何给我们的数据包装
var temp = new String('lion');//定义一个临时构造函数包含初始化的字符串
str = temp; //把构造函数赋给值类型
temp = null; //最后舍弃临时变量
ログイン後にコピー
- 查找字符串
str.indexOf('要查找的字符串',[起始位置]);
//demo:
var str = '我的名字是什么,名字不重要';
console.log(str.indexOf('名字', 3));
ログイン後にコピー
- 查找指定字符
str.charAt(0); //返回指定下标的字符
str.charCodeAt(0); //返回指定下标的ASCII码
ログイン後にコピー
- 拼接字符串
str.concat('word') //拼接字符串(开发中隐性拼接居多)
ログイン後にコピー
- 查找某一连续字符
str.substr('抓起始位置', '抓几个字符'); //查找某一连续字符
ログイン後にコピー
- 替换字符
str.replace('被替换的字符', '替换为字符') //如果字符串中有重复的字符,只会替换第一个
ログイン後にコピー
- 字符串转换成数组
split('分隔符') //把字符串转换为数组(被转换字符串中必须要写分隔符,而且要与split的分隔符统一!)
ログイン後にコピー
一些传参和类型的–
理论深入:
- 简单类型又被称为基本类型或者值类型 因为存储是值本身
- 系统自动分配释放存放函数的值,局部变量的值,被称为栈
- 复杂类型又叫引用类型 因为存储的是地址 调用的时候需要专门引用
- 现在栈里面存放16进制地址码,然后指向堆里面的数据(对象实例),被称为堆复杂类型传参,如果不是传值,传的指针,也就是传地址
- 特殊: Null返回的是一个空的对象(因为程序的设计缺陷)
可以定义变量为Null,稍后再给值
更多编程相关知识,请访问:编程入门!!