From 869dd2069c695ee7040cd3261713212155819f42 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Mon, 14 Dec 2020 12:18:12 -0500 Subject: final dump 2020-12-14 --- .../global_objects/string/charat/index.html | 238 +++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 files/id/web/javascript/reference/global_objects/string/charat/index.html (limited to 'files/id/web') diff --git a/files/id/web/javascript/reference/global_objects/string/charat/index.html b/files/id/web/javascript/reference/global_objects/string/charat/index.html new file mode 100644 index 0000000000..e464f2bd4c --- /dev/null +++ b/files/id/web/javascript/reference/global_objects/string/charat/index.html @@ -0,0 +1,238 @@ +--- +title: String.prototype.charAt() +slug: Web/JavaScript/Reference/Global_Objects/String/charAt +translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt +--- +
{{JSRef}}
+ +

Method charAt() pada Objek {{jsxref("String")}} mengembalikan string baru yang berisi kode lokasi single UTF-16 pada offset yang ditentukan ke dalam string.

+ +
{{EmbedInteractiveExample("pages/js/string-charat.html", "shorter")}}
+ + + +

Syntax

+ +
let character = str.charAt(index)
+ +

Parameter

+ +
+
index
+
Sebuah integer antara 0 sampai str.length - 1. Bila nilai index bukan dalam bentuk integer atau index tidak ditentukan, maka nilai index akan bernilai 0, sehingga karakter pertama varibel str akan dikembalikan/ di-return.
+
+ +

Nilai Return

+ +

Sebuah string yang merepresentasikan sebuah karakter pada indeks tertentu. Jika index indeks berada di luar range, maka charAt()  akan me-return string kosong.

+ +

Deskripsi

+ +

Karakter dalam sebuah string diberi indeks dari kiri ke kanan. Indeks karakter pertama adalah 0, dan index karakter terakhir dalam string — misal nama stringnya stringName, adalah stringName.length - 1. Jika indeks yang anda berikan diluar range ini, maka JavaScript akan me-return string kosong.

+ +

Jika tidak ada indeks yang tertera pada charAt(), maka nilai defaultnya adalah 0.

+ +

Contoh

+ +

Menampilkan karakter pada lokasi yang berbeda pada sebuah string

+ +

Contoh berikut menunjukan karakter di lokasi berbeda pada string "Brave new world":

+ +
var anyString = 'Brave new world';
+console.log("The character at index 0   is '" + anyString.charAt()   + "'");
+// Tidak ada angka yang tertera pada charAt(), maka digunakan nilai 0 sebagai default
+
+console.log("The character at index 0   is '" + anyString.charAt(0)   + "'");
+console.log("The character at index 1   is '" + anyString.charAt(1)   + "'");
+console.log("The character at index 2   is '" + anyString.charAt(2)   + "'");
+console.log("The character at index 3   is '" + anyString.charAt(3)   + "'");
+console.log("The character at index 4   is '" + anyString.charAt(4)   + "'");
+console.log("The character at index 999 is '" + anyString.charAt(999) + "'");
+
+ +

Baris kode di atas menghasilkan output sebagai berikut:

+ +
The character at index 0   is 'B'
+
+The character at index 0   is 'B'
+The character at index 1   is 'r'
+The character at index 2   is 'a'
+The character at index 3   is 'v'
+The character at index 4   is 'e'
+The character at index 999 is ''
+
+ +

Mendapatkan seluruh karakter

+ +

Berikut ini adalah cara untuk memastikan bahwa melalui loop string selalu memberikan karakter utuh, meskipun string berisi karakter yang tidak ada dalam Bidang Multilingual Dasar.

+ +
var str = 'A \uD87E\uDC04 Z'; // Kita bisa menggunakan karakter non-BMP
+for (var i = 0, chr; i < str.length; i++) {
+  if ((chr = getWholeChar(str, i)) === false) {
+    continue;
+  }
+  // Adapt this line at the top of each loop, passing in the whole string and
+  // the current iteration and returning a variable to represent the
+  // individual character
+
+  console.log(chr);
+}
+
+function getWholeChar(str, i) {
+  var code = str.charCodeAt(i);
+
+  if (Number.isNaN(code)) {
+    return ''; // Posisi tidak ditemukan
+  }
+  if (code < 0xD800 || code > 0xDFFF) {
+    return str.charAt(i);
+  }
+
+  // High surrogate (could change last hex to 0xDB7F to treat high private
+  // surrogates as single characters)
+  if (0xD800 <= code && code <= 0xDBFF) {
+    if (str.length <= (i + 1)) {
+      throw 'High surrogate without following low surrogate';
+    }
+    var next = str.charCodeAt(i + 1);
+      if (0xDC00 > next || next > 0xDFFF) {
+        throw 'High surrogate without following low surrogate';
+      }
+      return str.charAt(i) + str.charAt(i + 1);
+  }
+  // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
+  if (i === 0) {
+    throw 'Low surrogate without preceding high surrogate';
+  }
+  var prev = str.charCodeAt(i - 1);
+
+  // (could change last hex to 0xDB7F to treat high private
+  // surrogates as single characters)
+  if (0xD800 > prev || prev > 0xDBFF) {
+    throw 'Low surrogate without preceding high surrogate';
+  }
+  // We can pass over low surrogates now as the second component
+  // in a pair which we have already processed
+  return false;
+}
+
+ +

Pada environment ECMAScript 2016 yang memungkinkan assignment yang rusak, Berikut ini merupakan alternatif yang lebih ringkas dan fleksibel karena perulangan dilakukan penmabahan secara otomatis pada variabel increment/ penambahannya (jika karakter menjaminnya sebagai pasangan pengganti).

+ +
let str = 'A\uD87E\uDC04Z'  // Kita juga dapat menggunakan karakter non-BMP
+for (let i = 0, chr; i < str.length; i++) {
+  [chr, i] = getWholeCharAndI(str, i)
+
+  // Adapt this line at the top of each loop, passing in the whole string and
+  // the current iteration and returning an array with the individual character
+  // and 'i' value (only changed if a surrogate pair)
+
+  console.log(chr)
+}
+
+function getWholeCharAndI(str, i) {
+  let code = str.charCodeAt(i)
+
+  if (Number.isNaN(code)) {
+    return ''  // Posisi tidak ditemukan
+  }
+  if (code < 0xD800 || code > 0xDFFF) {
+    return [str.charAt(i), i]  // Karakter normal, keeping 'i' the same
+  }
+
+  // High surrogate (could change last hex to 0xDB7F to treat high private
+  // surrogates as single characters)
+  if (0xD800 <= code && code <= 0xDBFF) {
+    if (str.length <= (i + 1)) {
+      throw 'High surrogate without following low surrogate'
+    }
+    let next = str.charCodeAt(i + 1)
+      if (0xDC00 > next || next > 0xDFFF) {
+        throw 'High surrogate without following low surrogate'
+      }
+      return [str.charAt(i) + str.charAt(i + 1), i + 1]
+  }
+
+  // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
+  if (i === 0) {
+    throw 'Low surrogate without preceding high surrogate'
+  }
+
+  let prev = str.charCodeAt(i - 1)
+
+  // (could change last hex to 0xDB7F to treat high private surrogates
+  // as single characters)
+  if (0xD800 > prev || prev > 0xDBFF) {
+    throw 'Low surrogate without preceding high surrogate'
+  }
+
+  // Return the next character instead (and increment)
+  return [str.charAt(i + 1), i + 1]
+}
+
+ +

Memperbaiki charAt() untuk mendukung karakter non-Basic-Multilingual-Plane (BMP)

+ +

Pada contoh sebelumnya mungkin lebih berguna untuk program yang mendukung karakter non-BMP (karena tidak mengharuskan pemanggil untuk mengetahui dimana karakter non-BMP mungkin muncul), jika memang diinginkan, dalam memilih karakter dengan index, untuk memperlakukan pasangan pengganti dalam string sebagai karakter tunggal yang mereka wakili, dapat menggunakan yang berikut ini:

+ +
function fixedCharAt(str, idx) {
+  let ret = ''
+  str += ''
+  let end = str.length
+
+  let surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
+  while ((surrogatePairs.exec(str)) != null) {
+    let lastIdx = surrogatePairs.lastIndex
+    if (lastIdx - 2 < idx) {
+      idx++
+    } else {
+      break
+    }
+  }
+
+  if (idx >= end || idx < 0) {
+    return ''
+  }
+
+  ret += str.charAt(idx)
+
+  if (/[\uD800-\uDBFF]/.test(ret) && /[\uDC00-\uDFFF]/.test(str.charAt(idx + 1))) {
+    // Go one further, since one of the "characters" is part of a surrogate pair
+    ret += str.charAt(idx + 1)
+  }
+  return ret
+}
+
+ +

Specifications

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-string.prototype.charat', 'String.prototype.charAt')}}
+ +

Browser compatibility

+ + + +

{{Compat("javascript.builtins.String.charAt")}}

+ +

See also

+ + -- cgit v1.2.3-54-g00ecf